Vaadin登录后重定向至异常路径问题求助
问题原因与解决方案
这个问题的核心是Spring Security的CustomRequestCache缓存了PWA预缓存资源的请求。当用户未登录时,浏览器会自动请求Vaadin PWA相关的资源(比如sw-runtime-resources-precache.js),这个请求被Spring Security拦截后,被CustomRequestCache保存为“未授权的目标请求”,登录成功后就会重定向到这个缓存的URL,而非你期望的首页。
解决方案一:修改CustomRequestCache,过滤静态资源请求
调整CustomRequestCache的逻辑,让它只缓存真正的页面请求,忽略PWA相关静态资源。在saveRequest方法中添加判断:
public class CustomRequestCache extends HttpSessionRequestCache { @Override public void saveRequest(HttpServletRequest request, HttpServletResponse response) { // 过滤PWA相关静态资源请求,不缓存 String requestUri = request.getRequestURI(); if (!requestUri.contains("sw-") && !requestUri.equals("/manifest.webmanifest")) { super.saveRequest(request, response); } } }
这样静态资源请求不会被缓存,登录后Spring Security会自动重定向到首页。
解决方案二:强制指定登录成功后的默认重定向URL
如果不想修改CustomRequestCache,可在Spring Security配置中为formLogin添加defaultSuccessUrl,强制登录成功后跳转到首页:
.and().formLogin() .loginPage(LOGIN_URL).permitAll() .loginProcessingUrl(LOGIN_PROCESSING_URL) .failureUrl(LOGIN_FAILURE_URL) .defaultSuccessUrl("/", true) // 强制跳转到首页,忽略缓存的请求
这里的"/"对应你设置了RouteAlias("")的首页路径,第二个参数true表示无论之前是否有缓存请求,都强制跳转至此URL。
补充优化:确保静态资源被Security忽略
检查WebSecurity配置,将sw-runtime-resources-precache.js加入忽略列表,避免Spring Security拦截该请求:
web.ignoring().antMatchers( // ... 原有忽略项 "/sw-runtime-resources-precache.js" // 添加此项 );
从根源上避免该资源请求被Security拦截,也就不会被缓存为重定向目标。
内容的提问来源于stack exchange,提问作者Nullpointer42
相关产品推荐
相关产品推荐

