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

Spring Security 6多入口点配置引发403错误求助

问题分析与解决方案

你配置了两个SecurityFilterChain后所有API请求返回403,移除第二个配置就恢复正常,核心问题出在第二个过滤器链的匹配范围上:

原因拆解

  • 第一个过滤器链(@Order(1))通过securityMatcher("/api/**", "/" + apiPrefix + "/api/**")明确了仅处理API路径请求,同时配置了API所需的认证提供者(Basic、JWT、X509)、自定义RequestFilter、无状态会话等关键规则。
  • 第二个过滤器链(@Order(2))未设置securityMatcher,这意味着它会匹配所有请求——包括原本应该由第一个链处理的API请求。由于第二个链没有配置API所需的认证逻辑(缺少RequestFilter、对应认证提供者),请求进入这个链后无法完成认证,直接返回403错误。

修复方案

给第二个过滤器链添加明确的securityMatcher,限制它只处理非API请求,避免覆盖第一个链的匹配范围。

修改后的第二个配置示例:

@Configuration
@Order(2)
public class AnotherWebSecurtyConfigurator {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            // 指定该链仅处理非API请求,可根据实际业务调整匹配规则
            .securityMatcher("/**")
            // 排除API路径,让这些请求交由第一个链处理
            .authorizeHttpRequests((requests) -> requests
                .requestMatchers("/api/**", "/" + apiPrefix + "/api/**").permitAll()
                .requestMatchers(HttpMethod.OPTIONS).denyAll()
                .anyRequest().authenticated())
            .csrf(AbstractHttpConfigurer::disable);
        
        return http.build();
    }
}

如果你的第二个链是专门处理前端页面路径,也可以更精准地指定匹配规则:

.securityMatcher("/", "/home/**", "/dashboard/**")

注意事项

  • 多个SecurityFilterChain的匹配规则尽量避免重叠,若必须重叠,通过@Order确保更具体的规则(如API路径)优先匹配。
  • 每个过滤器链的配置完全独立,第二个链不会继承第一个链的任何配置(比如认证提供者、过滤器),必须确保每个链只处理自身负责的请求范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:36:09