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

如何将基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:05:20