Vaadin 8 Spring Boot集成非Vaadin UI路径访问异常求助
我之前适配Vaadin示例项目的时候也碰到过一模一样的问题!Vaadin默认会接管几乎所有HTTP请求,导致Actuator端点、自定义非Vaadin登录页这类路径被错误重定向到带#!的Vaadin路由。给你几个亲测有效的解决办法:
配置Vaadin忽略特定路径
直接在Spring Boot的配置文件里指定Vaadin不需要处理的路径。比如在application.properties里添加:vaadin.url.excludes=/actuator/**,/login/**如果用yaml格式的
application.yml:vaadin: url: excludes: - /actuator/** - /login/**这样Vaadin就会跳过这些路径的请求,直接交给Spring MVC或者对应的控制器处理。
修改Vaadin Servlet的映射路径
如果上面的方法没生效,可以调整Vaadin Servlet的映射范围,不让它霸占根路径/*。比如把Vaadin的UI都放到/ui/*路径下,这样只有访问/ui开头的路径才会走Vaadin。
你可以创建一个配置类来注册Vaadin Servlet:@Configuration public class VaadinServletConfig { @Bean public ServletRegistrationBean<VaadinServlet> vaadinServlet() { VaadinServlet servlet = new VaadinServlet(); ServletRegistrationBean<VaadinServlet> registration = new ServletRegistrationBean<>(servlet, "/ui/*"); registration.setLoadOnStartup(1); return registration; } }之后你的Vaadin Dashboard就会在
http://localhost:8080/ui/dashboard访问,而/actuator/health和/login就能正常访问了。检查Spring Security配置(如果用到的话)
如果你项目里加了Spring Security,要确保这些非Vaadin路径被允许匿名访问,同时避免和Vaadin的认证机制冲突。比如继承VaadinWebSecurityConfigurerAdapter后,额外添加允许规则:@Configuration @EnableWebSecurity public class SecurityConfig extends VaadinWebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { super.configure(http); // 开放Actuator和登录页的访问权限 http.authorizeRequests() .antMatchers("/actuator/**", "/login").permitAll(); } }清理浏览器缓存
最后别忘了清空浏览器缓存或者用隐私模式测试,有时候旧的重定向缓存会干扰新配置的生效。
内容的提问来源于stack exchange,提问作者alexanoid

