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

Spring Security配置疑问:如何为两组API分别配置不同过滤器?

实现Spring Security多路径对应不同过滤器的解决方案

当然可以实现不同API路径使用不同过滤器的需求,你之前的配置问题出在:在同一个HttpSecurity实例上反复调用antMatcher,后续配置会覆盖前面的规则,且添加的过滤器会被加入全局过滤器链,导致所有请求都会经过FilterB(包括/api/**的请求)。

正确的做法是创建多个独立的SecurityFilterChain Bean,每个Bean对应一组路径和专属的过滤器配置,Spring Security会根据请求路径匹配最精确的过滤器链来处理请求,互相不会干扰。

具体配置示例

@Configuration
@EnableWebSecurity
public class MultiFilterSecurityConfig {

    // 处理/api/**路径的过滤器链
    @Bean
    public SecurityFilterChain apiFilterChain(HttpSecurity http) throws Exception {
        http
                .securityMatcher("/api/**") // 指定该链负责的路径
                .csrf(csrf -> csrf.disable())
                .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                .anonymous(anonymous -> anonymous.disable())
                .addFilterBefore(new FilterA(), AbstractPreAuthenticatedProcessingFilter.class)
                .authorizeRequests(auth -> auth
                        .anyRequest().authenticated())
                .exceptionHandling(ex -> ex.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)));
        
        return http.build();
    }

    // 处理/admin/**路径的过滤器链
    @Bean
    public SecurityFilterChain adminFilterChain(HttpSecurity http) throws Exception {
        http
                .securityMatcher("/admin/**") // 指定该链负责的路径
                .csrf(csrf -> csrf.disable())
                .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                .anonymous(anonymous -> anonymous.disable())
                .addFilterBefore(new FilterB(), AbstractPreAuthenticatedProcessingFilter.class)
                .authorizeRequests(auth -> auth
                        .anyRequest().authenticated())
                .exceptionHandling(ex -> ex.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)));
        
        return http.build();
    }
}

关键说明

  • 使用securityMatcher(Spring Security 5.4+推荐,替代旧的antMatcher)明确指定每个过滤器链对应的路径范围
  • 每个SecurityFilterChain是独立的Bean,各自维护自己的过滤器、授权规则、会话管理等配置
  • Spring Security会自动根据请求路径匹配最精准的过滤器链,/api/**的请求只会走apiFilterChain,/admin/**的请求只会走adminFilterChain,不会交叉触发过滤器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:01:06