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

Spring Boot 3与Vaadin 24安全过滤器链配置引发403问题求助

解决方案

你的问题源于Spring Security 6(Spring Boot 3.x配套版本)的请求匹配规则变化,以及Vaadin 24的核心资源/请求未被Spring Security放行,同时默认启用的CSRF保护拦截了Vaadin的通信请求。调整配置如下:

修改SecurityFilterChain配置

@Bean
SecurityFilterChain filterChain(HttpSecurity http, MvcRequestMatcher.Builder mvc) throws Exception {
    http
        .authorizeHttpRequests(authorize -> authorize
            // 放行Vaadin客户端静态资源(JS/CSS等)
            .requestMatchers(mvc.pattern("/VAADIN/**")).permitAll()
            // 放行Vaadin核心UI通信请求(UIDL)
            .requestMatchers(mvc.pattern("/**").queryParam("v-r", "uidl")).permitAll()
            // 放行登录页、错误页、H2控制台(修复路径的横杠问题)
            .requestMatchers(mvc.pattern("/login"), mvc.pattern("/error"), mvc.pattern("/h2-console/**")).permitAll()
            // 其余所有请求需认证
            .anyRequest().authenticated()
        )
        .saml2Login(saml2 -> {
            // 保留原有SAML配置
        })
        // 配置CSRF忽略Vaadin相关请求(Vaadin自身已处理CSRF)
        .csrf(csrf -> csrf
            .ignoringRequestMatchers(
                mvc.pattern("/VAADIN/**"),
                mvc.pattern("/**").queryParam("v-r", "uidl"),
                mvc.pattern("/push/**") // 若使用Vaadin推送功能则添加
            )
        );
    return http.build();
}

关键调整说明

  1. 放行Vaadin静态资源:Vaadin 24的客户端资源(如框架JS、主题样式)都放在/VAADIN/**路径下,必须放行才能让前端正常加载,否则会返回403。
  2. 放行UIDL请求:?v-r=uidl是Vaadin客户端与服务器同步UI状态的核心请求,必须允许通过,否则页面无法交互。
  3. 修复H2控制台路径:你升级后的配置写错了路径(/h2console/**改为/h2-console/**),不修正的话H2控制台也会无法访问。
  4. CSRF适配:Spring Boot 3.x默认启用CSRF保护,但Vaadin自身有独立的CSRF防护机制,因此需要让Spring Security忽略Vaadin相关请求的CSRF校验,避免因令牌缺失导致403。

内容的提问来源于stack exchange,提问作者supernicky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:52:34