Spring Security中WebSecurityConfigurerAdapter废弃后如何重构自动配置类
Spring Security废弃WebSecurityConfigurerAdapter后的自动配置重构
针对你升级Spring Boot后遇到的WebSecurityConfigurerAdapter废弃问题,需要从条件注解和Bean实现两部分重构自动配置类,具体方案如下:
1. 替换@ConditionalOnMissingBean的判断条件
原代码中@ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class)是判断是否存在自定义的WebSecurityConfigurerAdapter Bean,现在Spring Security推荐使用SecurityFilterChain作为安全配置的核心Bean,因此需要将条件改为检查是否存在自定义的SecurityFilterChain:
@ConditionalOnMissingBean(SecurityFilterChain.class)
2. 重构安全配置Bean的实现
不再返回废弃的WebSecurityConfigurerAdapter,而是直接返回SecurityFilterChain,使用Spring Security推荐的lambda风格API配置HttpSecurity:
完整重构后的代码示例
@Configuration public class MyAutoConfiguration { @Bean @ConditionalOnMissingBean(SecurityFilterChain.class) public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception { // 这里替换为你原来在WebSecurityConfigurerAdapter#configure(HttpSecurity)中的配置逻辑 http .authorizeHttpRequests(auth -> auth .requestMatchers("/actuator/**").permitAll() .anyRequest().authenticated() ) .formLogin(form -> form .loginPage("/login") .permitAll() ) .logout(logout -> logout.permitAll()); return http.build(); } // 如果原来有WebSecurity的配置(比如忽略静态资源),添加这个Bean @Bean @ConditionalOnMissingBean(WebSecurityCustomizer.class) public WebSecurityCustomizer defaultWebSecurityCustomizer() { // 替换为你原来在WebSecurityConfigurerAdapter#configure(WebSecurity)中的忽略规则 return web -> web.ignoring().requestMatchers("/static/**", "/public/**"); } }
关键说明
- 新的配置方式直接基于
SecurityFilterChain,这是Spring Security 5.4+官方推荐的无适配器配置方案,避免依赖废弃类。 - 如果你的自动配置需要兼容旧版本的
WebSecurityConfigurerAdapter配置,Spring Security会自动将旧的适配器实例适配为SecurityFilterChain,但建议优先使用新API。
内容的提问来源于stack exchange,提问作者VichynewSTB
相关产品推荐
相关产品推荐

