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

如何在Spring Security中为单个端点配置OAuth2资源服务器认证

解决方案:拆分多组SecurityFilterChain隔离认证逻辑

问题根源是当前单条SecurityFilterChain会让所有请求经过BearerTokenAuthenticationFilter,一旦认证失败就直接终止过滤链,无法触发自定义认证逻辑。Spring Security支持配置多条SecurityFilterChain,通过优先级和请求匹配规则,让不同端点走各自的认证流程。

实现步骤

1. 配置SSO登录端点专用FilterChain

创建优先级更高的FilterChain,仅处理/sso/login请求,使用OAuth2资源服务器认证:

@Bean
@Order(1)
public SecurityFilterChain ssoLoginSecurityFilterChain(HttpSecurity http) throws Exception {
    return http
            .securityMatcher("/sso/login")
            .httpBasic(AbstractHttpConfigurer::disable)
            .csrf(AbstractHttpConfigurer::disable)
            .formLogin(AbstractHttpConfigurer::disable)
            .logout(AbstractHttpConfigurer::disable)
            .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
            .authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
            .oauth2ResourceServer(oauth2 -> oauth2.jwt(withDefaults()))
            .build();
}

2. 配置默认请求的FilterChain

创建优先级较低的FilterChain,处理除/sso/login外的所有请求,使用自定义认证逻辑:

@Bean
@Order(2)
public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http, AuthenticationManager authManager) throws Exception {
    return http
            .securityMatcher("/**")
            .httpBasic(AbstractHttpConfigurer::disable)
            .csrf(AbstractHttpConfigurer::disable)
            .formLogin(AbstractHttpConfigurer::disable)
            .logout(AbstractHttpConfigurer::disable)
            .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
            .authorizeHttpRequests(auth -> auth
                    .requestMatchers("/login").permitAll()
                    .requestMatchers(getRequestMatchers()).authenticated()
                    .anyRequest().permitAll()
            )
            .addFilterBefore(getCustomAuthenticationProcessingFilter(authManager), AnonymousAuthenticationFilter.class)
            .build();
}

关键说明

  • 优先级控制:通过@Order注解指定执行顺序,数值越小优先级越高。/sso/login的请求会先被第一条FilterChain拦截处理,不会进入默认FilterChain。
  • 请求范围隔离:使用securityMatcher明确限定每条FilterChain的处理请求范围,避免过滤器互相干扰。
  • 独立认证逻辑:两条FilterChain分别配置各自的认证方式,默认FilterChain仅触发自定义认证过滤器,不会加载BearerTokenAuthenticationFilter。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:33:09