如何从WebSecurityConfigurerAdapter迁移到SecurityFilterChain
Spring Security 废弃配置迁移方案
WebSecurityConfigurerAdapter在Spring Security 5.7及以上版本被标记为@Deprecated,官方推荐通过向Spring容器注册SecurityFilterChain类型Bean的方式实现安全配置,无需再继承适配器类重写方法。
你提供的旧配置对应的等效新实现如下:
@Configuration static class HttpSecurityConfiguration { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http // 所有请求都需要认证 .authorizeHttpRequests(auth -> auth.anyRequest().authenticated()) // 启用默认表单登录 .formLogin(Customizer.withDefaults()) // 启用默认HTTP Basic认证 .httpBasic(Customizer.withDefaults()) // 会话策略设置为不主动创建会话 .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.NEVER)) // 关闭CSRF防护 .csrf(csrf -> csrf.disable()); return http.build(); } }
迁移关键注意点
- 新写法不需要继承任何基类,直接在配置类中声明
SecurityFilterChain的Bean即可,Spring会自动读取该Bean中的安全规则。 - 旧版的
authorizeRequests()属于已过时的权限拦截API,官方推荐替换为基于AuthorizationManager的authorizeHttpRequests(),两者效果在你给出的场景下完全一致;如果需要100%兼容旧逻辑,也可以暂时继续使用authorizeRequests(),后续版本迭代再替换。 - 旧写法中无自定义参数的配置项(如
formLogin()、httpBasic()),新写法传入Customizer.withDefaults()即可启用和旧版完全一致的默认配置。 - 所有配置逻辑编写完成后,必须调用
http.build()生成SecurityFilterChain实例返回,否则配置不会生效。 - 如果原有代码中还通过重写
configure(WebSecurity web)配置了忽略拦截的路径(比如静态资源),可以单独注册WebSecurityCustomizer类型的Bean实现对应逻辑,不需要写在SecurityFilterChain的配置中。
内容的提问来源于stack exchange,提问作者membersound
相关产品推荐
相关产品推荐

