我已经集成了Vaadin 7,将用户界面嵌入到基于Spring Boot的应用程序的一些JSP页面中,如Vaadin Book中所述。
尽管当我调用嵌入它的路径(通过SpringMVC控制器)时,名为“v-my-vaadin-UI”的UI被正确显示,但在与UI交互时,我得到了一个HTTP405错误。
URL上出现错误:
http://localhost:8080/v-我的vaadin ui/UIDL/?v-uiId=4
似乎是因为在Spring Boot中,默认情况下,所有控制器都只允许使用GET方法(正如这里所解释的,必须显式地允许POST)
已尝试在我的Spring Security配置中禁用CSRF并配置Vaadin相关路径:
http.authorizeRequests()
.antMatchers("/vaadinServlet/**",
"/UIDL/**",
"/v-my-vaadin-ui/UIDL/**",
"/v-my-vaadin-ui/PUSH/**",
"/HEARTBEAT/**", "/VAADIN/**").permitAll();
http.csrf().disable();
因为VAADIN集成不需要Spring管理的CSRF,但这并不能解决问题。
VAADIN应用程序非常基本:
@SpringUI(path = "v-my-vaadin-ui")
public class MyVaadinUI extends UI {
private static final long serialVersionUID = -8129815147461786549L;
@Override
protected void init(VaadinRequest vaadinRequest) {
final TextField name = new TextField("Name");
final Button greetButton = new Button("Greet");
greetButton.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
Notification.show("Hi " + name.getValue(),
Notification.Type.HUMANIZED_MESSAGE);
}
});
VerticalLayout vl = new VerticalLayout(name, greetButton);
vl.setSpacing(true);
setContent(vl);
}
}
但点击Vaadin按钮,响应代码为405,具体例外情况如下:
.w、 s.m.a.ResponseStatusExceptionResolver:解析处理程序[ResourceHttpRequestHandler[locations=[ServletContext resource[/],类路径资源[META-INF/resources/],类路径资源[resources/],类路径资源[static/],类路径资源[public/],解析程序=[org.springframework.web.servlet.resource]。PathResourceResolver@4a8756c3]]]:org。springframework。网状物HttpRequestMethodNotSupportedException:不支持请求方法“POST”
不幸的是,我没有找到任何方法来配置用户界面的POST方法作为一个简单的控制器,即通过
@RequestMapping(method = {RequestMethod.GET, RequestMethod.POST})
因为此批注不能用于Vaadin UI。
此外,如果我直接调用UI(即不通过Spring控制器)的URL:
http://localhost:8080/v-my-vaadin-ui
用户界面显示和工作完美。
知道是什么导致了这个问题吗?如何允许使用POST方法?
解决了的!!
该问题是由我在嵌入VAADIN应用程序时使用的JS脚本中出错引起的(我遵循了以下文档:https://vaadin.com/docs/-/part/framework/advanced/advanced-embedding.html)特别是“serviceUrl”参数的代码片段:
"serviceUrl": "helloworld/",
我理解为使用应用程序的名称进行设置,在我的例子中是“v-my-vaadin-ui”。
但正确的"serviceUrl"在我的情况下,仍然是默认的一个"vaadinServlet/"所以改变:
"serviceUrl": "v-my-vaadin-ui/",
到
"serviceUrl": "vaadinServlet/",
一切正常。
下面是JSP标记的完整代码,用于嵌入适用于我的vaadin应用程序:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@tag description="ajax widget tag" pageEncoding="UTF-8"%>
<%@attribute name="v_app_url"%>
<%-- Javascript as described here: https://vaadin.com/docs/-/part/framework/advanced/advanced-embedding.html --%>
<div>
<div id="${v_app_url}" class="v-app myvaadinui" >
<div class="v-app-loading"></div>
<noscript>
You have to enable javascript in your browser to use an application built with Vaadin.
</noscript>
</div>
<script type="text/javascript">//<![CDATA[
if (!window.vaadin)
alert("Failed to load the bootstrap JavaScript: vaadinBootstrap.js");
/* The UI Configuration */
vaadin.initApplication("${v_app_url}", {
"browserDetailsUrl": "${v_app_url}/",
"serviceUrl": "vaadinServlet/",
"widgetset": "com.vaadin.DefaultWidgetSet",
"theme": "valo",
"versionInfo": {"vaadinVersion": "7.4.4"},
"vaadinDir": "/VAADIN/",
"heartbeatInterval": 300,
"debug": false,
"standalone": false,
"authErrMsg": {
"message": "Take note of any unsaved data, "+
"and <u>click here<\/u> to continue.",
"caption": "Authentication problem"
},
"comErrMsg": {
"message": "Take note of any unsaved data, "+
"and <u>click here<\/u> to continue.",
"caption": "Communication problem"
},
"sessExpMsg": {
"message": "Take note of any unsaved data, "+
"and <u>click here<\/u> to continue.",
"caption": "Session Expired"
}
});//]] >
</script>
</div>
您试用过这个附加组件吗?https://vaadin.com/directory#!插件/jsp集成
本文向大家介绍基于Spring Boot保护Web应用程序,包括了基于Spring Boot保护Web应用程序的使用技巧和注意事项,需要的朋友参考一下 如果在类路径上添加了Spring Boot Security依赖项,则Spring Boot应用程序会自动为所有HTTP端点提供基本身份验证。端点“/”和“/home”不需要任何身份验证。所有其他端点都需要身份验证。 要将Spring Boot S
问题内容: 我正在设计一个简单的基于Web的应用程序。我是这个基于Web的领域的新手,我需要您提供有关设计模式的建议,例如应如何在Servlet之间分配职责,创建新Servlet的条件等。 实际上,我主页上的实体很少,而与每个实体相对应,我们几乎没有添加,编辑和删除等选项。之前,我为每个选项使用一个Servlet,例如Servlet1用于添加实体1,Servlet2用于编辑实体1,依此类推,这样我
问题内容: 我正在设计一个简单的基于Web的应用程序。我是这个基于Web的领域的新手,我需要您提供有关设计模式的建议,例如如何在Servlet之间分配职责,创建新Servlet的标准等。 实际上,我主页上的实体很少,而与每个实体相对应,我们几乎没有添加,编辑和删除等选项。早些时候,我为每个选项使用一个Servlet,例如Servlet1用于添加实体1,Servlet2用于编辑实体1,依此类推,这样
问题内容: 如何在基于Java的桌面应用程序中嵌入浏览器?我是否可以直接与嵌入式浏览器通信(而不是通过本地主机)……例如加载html文本,捕获onclick事件,获取表单值? 谢谢 问题答案: 查看Eclipse,它具有一个嵌入式浏览器,用户可以对其进行配置(它们支持多种浏览器)。 即使您通过AWT_SWT桥使用基于AWT的应用程序,也可能会嵌入他们的浏览器。 此文章可以帮助您开始。
问题内容: 我在我的应用程序中使用Spring安全功能,但是我发现,当会话过期时,所有请求ajax返回页面login.jsp(不重定向,在http响应中,它放置所有html内容)即登录页面我的webapp。我在应用程序中使用了很多ajax请求,目标是返回某些错误代码,例如510,而不是登录页面。 没有invalid-session-url,我试图使invalid-session-url =“”,不
主要内容:创建项目,在Eclipse中导入项目,运行项目从这篇文章开始,我们使用Spring-AOP框架编写实际的AOP应用程序。在开始使用Spring-WS框架编写第一个示例之前,必须确保已经按照Spring AOP安装配置教程中的说明正确设置了Spring-AOP开发运行环境。 现在我们继续来编写一个简单的基于控制台的Spring AOP应用程序,它用于演示AOP的概念。 先来看看要创建的项目的目录结构 - 创建项目 打开命令控制台,进入目录并执行