我使用Vaadin(7.6.1)和SpringBoot(1.3.0),我在浏览器中遇到了有关应用程序URL的问题。
如果我打电话给" http://localhost:8080/myApp/"一切正常--Spring Security阻止请求,重定向到登录页面,并在身份验证后调用defaultSuccessUrl(" /#!")。但是,如果用户呼叫" http://localhost:8080/myApp" (没有最后一个斜杠)Spring Security也可以工作,但重定向到savedRequestUrl。在这种情况下,会显示一条错误消息(" 无法加载引导程序javascript:./ evadin / evadinbootstrap.js ")。
通常我希望Spring Security重定向到savedRequestUrl,那我该怎么办? Servlet的URL模式是我的问题吗?在this answer中有一个基于注释的WebServlet的示例,但如果这是我的问题,我应该如何将它集成到我的应用程序中?
我定义了自己的SpringVaadinServlet,它覆盖了默认的vaadinServlet bean。我的课程看起来像这样:
@SpringBootApplication
public class MyApp
{
public static void main(String[] args)
{
SpringApplication.run(MyApp.class, args);
}
@Bean(name = "vaadinServlet")
public CustomSpringVaadinServlet springVaadinServlet()
{
return new CustomSpringVaadinServlet();
}
}
public class ServletInitializer extends SpringBootServletInitializer
{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
{
[...]
return application.sources(MyApp.class);
}
}
public class CustomSpringVaadinServlet extends SpringVaadinServlet
{
private static final long serialVersionUID = -6507628193889155490L;
private final static Logger LOG = LoggerFactory.getLogger(SpringVaadinServletWsi.class);
@Override
protected void servletInitialized() throws ServletException
{
super.servletInitialized();
getService().setSystemMessagesProvider(new SystemMessagesProvider()
{
private static final long serialVersionUID = -5253418651979378723L;
@Override
public SystemMessages getSystemMessages(SystemMessagesInfo systemMessagesInfo)
{
CustomizedSystemMessages messages = new CustomizedSystemMessages();
messages.setCommunicationErrorCaption("Kommunikationsfehler");
[...]
return messages;
}
});
}
}