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

Spring Boot库中如何正确添加自定义Spring Security过滤器链Filter

Spring Boot库无侵入添加自定义Security过滤器的正确实现方案

不要强制用户继承自定义的WebSecurityConfigurerAdapter,这种方案侵入性强,且依赖用户主动调用父类方法才会生效。推荐采用无侵入的自动配置方案,根据你使用的Spring版本选择对应实现:

推荐实现(适配Spring Boot 2.4+/Spring Security 5.4+)

核心依赖Spring Security提供的HttpSecurityCustomizer接口,所有该接口的实现Bean会被自动应用到所有SecurityFilterChain的构建流程中,完全兼容用户自定义的安全配置,不会产生冲突。
自动配置类示例代码:

@Configuration
@ConditionalOnWebApplication
@ConditionalOnClass({HttpSecurity.class, AbstractPreAuthenticatedProcessingFilter.class})
public class MySecurityAutoConfiguration {

    // 注册自定义过滤器Bean
    @Bean
    @ConditionalOnMissingBean
    public MyFilter myFilter() {
        return new MyFilter();
    }

    // 注册自定义配置器,自动将过滤器插入到Security链指定位置
    @Bean
    public HttpSecurityCustomizer<HttpSecurity> myFilterCustomizer(MyFilter myFilter) {
        return http -> {
            try {
                http.addFilterBefore(myFilter.getFilter(), AbstractPreAuthenticatedProcessingFilter.class);
            } catch (Exception e) {
                throw new RuntimeException("自定义认证过滤器注册失败", e);
            }
        };
    }

    // 可选:禁止过滤器被自动注册到全局Servlet过滤器链,仅在Security链中生效
    @Bean
    public FilterRegistrationBean<Filter> disableFilterAutoRegister(MyFilter myFilter) {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>(myFilter.getFilter());
        registration.setEnabled(false);
        return registration;
    }
}

完成代码后将自动配置类的全限定名添加到META-INF/spring.factories文件中,通过Spring Boot自动装配机制触发加载,用户引入依赖即可直接生效,无需修改自身安全配置:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xxx.MySecurityAutoConfiguration

低版本兼容实现(适配Spring Security 5.4以前版本)

如果需要兼容旧版本,可注册一个优先级最低的WebSecurityConfigurerAdapter,仅执行过滤器添加逻辑,不修改任何权限规则,不会覆盖用户的自定义配置:

@Configuration
@Order(Ordered.LOWEST_PRECEDENCE - 100) // 优先级设为最低,保证用户配置先执行
public class MyFilterSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private MyFilter myFilter;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 仅添加过滤器,不配置任何权限规则,避免覆盖用户配置
        http.addFilterBefore(myFilter.getFilter(), AbstractPreAuthenticatedProcessingFilter.class);
    }
}

同样将该配置类添加到spring.factories的自动配置列表即可。

注意事项

  • 不要在自动配置类中添加@EnableWebSecurity注解,该注解会关闭Spring Boot默认的安全自动配置,会和用户配置产生冲突
  • 如果过滤器仅需对特定路径生效,可在过滤器内部自行实现路径匹配逻辑,无需修改全局安全配置
  • 如果存在多个安全过滤器链的场景,HttpSecurityCustomizer会自动应用到所有链中,无需额外适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:06:00