如何将基于WebSecurityConfigurerAdapter的Spring Boot 2安全配置迁移到Spring Boot 3
Spring Boot 2 → 3 安全配置迁移实操指南
核心配置类重构(必改)
- 彻底移除
WebSecurityConfigurerAdapter的继承关系,改用@Configuration注解标记配置类,通过@Bean定义SecurityFilterChain替代原configure(HttpSecurity)方法的逻辑 - 示例代码:
@Configuration public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth .requestMatchers("/public/**").permitAll() .anyRequest().authenticated() ) .formLogin(form -> form .loginPage("/login") .permitAll() ); return http.build(); } }
可直接复用的组件
- 自定义UserDetailsService:只要实现
UserDetailsService接口的业务逻辑未依赖Spring Security弃用API,可原封不动保留 - CustomOAuth2UserService:实现
OAuth2UserService<OAuth2UserRequest, OAuth2User>的自定义服务类,核心逻辑直接复用,仅需确认依赖类的包路径未变更(OAuth2核心类包路径基本无变动) - 自定义认证过滤器:继承
OncePerRequestFilter等标准过滤器类的实现,业务逻辑无需修改,仅调整注册方式即可
需调整的配置细节
1. 过滤器注册方式
原在configure(HttpSecurity)中使用addFilterBefore/After的方式,改为在SecurityFilterChain Bean中注入过滤器并配置:
@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http, CustomAuthFilter customAuthFilter) throws Exception { http.addFilterBefore(customAuthFilter, UsernamePasswordAuthenticationFilter.class); // 其他安全配置 return http.build(); }
同时确保自定义过滤器被声明为@Bean或通过组件扫描加载
2. 密码编码器强制要求
Spring Security 6不再支持自动适配密码编码器,必须显式声明PasswordEncoder Bean:
@Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }
需保证所有认证逻辑(如UserDetailsService返回的密码)都使用该编码器加密
3. 方法安全注解替换
原@EnableGlobalMethodSecurity替换为@EnableMethodSecurity,参数配置逻辑一致:
@Configuration @EnableMethodSecurity(prePostEnabled = true) public class MethodSecurityConfig { // 自定义方法安全逻辑可直接迁移 }
4. OAuth2登录配置迁移
原oauth2Login()的配置逻辑迁移到SecurityFilterChain的lambda配置中:
http .oauth2Login(oauth2 -> oauth2 .userInfoEndpoint(userInfo -> userInfo .userService(customOAuth2UserService) ) );
5. 弃用API替换
- 原
antMatchers()替换为requestMatchers()用于请求路径匹配 - 原通过
AuthenticationManagerBuilder配置认证管理器的方式,改为通过AuthenticationConfiguration获取:@Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception { return authConfig.getAuthenticationManager(); }
Bean管理调整
原在WebSecurityConfigurerAdapter中声明的@Bean(如UserDetailsService、PasswordEncoder等),直接保留在配置类中即可,无需修改
内容的提问来源于stack exchange,提问作者Kris Swat
相关产品推荐
相关产品推荐

