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

Vaadin 24拦截REST接口请求,配置专属Security仍无效

解决Vaadin 24 + Spring Boot 3.2.0 Webflux环境下REST接口被Security拦截的问题

核心问题:误用Servlet Security配置在Webflux环境

你当前的RestSecurityConfig使用的是Servlet体系的HttpSecurity,但Webflux项目依赖的是Reactive Security(基于ServerHttpSecurity),两者属于完全独立的安全配置体系,导致你的REST配置无法生效,请求被Vaadin的Servlet Security配置拦截。


解决步骤

1. 替换为Webflux的Reactive Security配置

将REST专属的Security配置改为Reactive版本,确保它能在Webflux环境中被正确加载:

@Configuration
@Order(1) // 优先级高于Vaadin的配置(默认Order=100)
public static class RestSecurityConfig {
    @Bean
    public SecurityWebFilterChain restSecurityFilterChain(ServerHttpSecurity http) {
        // 限定此配置仅处理/api/**路径
        http.securityMatcher(ServerWebExchangeMatchers.pathMatchers("/api/**"))
                // REST接口无需CSRF保护,直接禁用
                .csrf(ServerHttpSecurity.CsrfSpec::disable)
                // 允许所有/api/**请求通过
                .authorizeExchange(exchanges ->
                        exchanges.anyExchange().permitAll()
                );
        return http.build();
    }
}

2. 移除Servlet MVC相关的Bean

删除mvcHandlerMappingIntrospector这个Bean,它是Servlet MVC体系的组件,在Webflux环境中不仅无用,还可能引发配置冲突。

3. 调整Vaadin Security配置的范围

确保Vaadin的Security配置仅处理自身相关路径,避免与REST路径重叠:

@Configuration
@Order(100)
public class VaadinSecurityConfig extends VaadinWebSecurity {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 保留Vaadin默认安全配置
        super.configure(http);
        // 限定Vaadin配置仅处理自身核心路径
        http.securityMatcher("/", "/VAADIN/**", "/login/**", "/logout/**", "/register/**");
        // 明确放行/api/**路径(双重保险)
        http.authorizeHttpRequests(auth ->
                auth.requestMatchers("/api/**").permitAll()
        );
    }
}

额外排查点

  • 检查依赖冲突:确认项目是否同时引入了Servlet和Webflux的Security依赖,若存在混合依赖,需明确指定使用Reactive Security(通过spring.security.reactive.enabled=true配置)。
  • 验证请求路径:确保Postman请求的路径严格匹配/api/**,避免拼写错误(如多写/少写斜杠、路径前缀不符)。
  • 调试过滤器链:通过Spring Boot Actuator的/actuator/filters端点查看过滤器执行顺序,确认REST的SecurityWebFilterChain是否被优先加载。
  • 检查Webflux自动配置:确认spring-boot-starter-webflux是项目的核心Web依赖,而非spring-boot-starter-web(Servlet)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:16:17