You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:35:28