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

Spring Boot项目升级Spring Security至6.0遇WebSecurityConfigurerAdapter弃用问题

Spring Security 6.0 获取 AuthenticationManager 的替代方案

在Spring Security 6.0中,WebSecurityConfigurerAdapter已被彻底移除,取而代之的是组件式配置——通过定义SecurityFilterChain和AuthenticationManager的Bean来实现认证授权逻辑。以下是几种可靠的获取AuthenticationManager的方式:

方式一:通过AuthenticationConfiguration直接获取

这种方式最简单,Spring会自动整合你配置的UserDetailsService、PasswordEncoder等组件,生成符合预期的AuthenticationManager:

import org.springframework.context.annotation.Bean;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.stereotype.Component;

@Component
public class SecurityBeansConfig {
    @Bean
    public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception {
        return authConfig.getAuthenticationManager();
    }
}

方式二:手动构建AuthenticationManager

如果需要自定义认证逻辑(比如添加多种认证Provider),可以手动实例化ProviderManager并配置所需的AuthenticationProvider:

import org.springframework.context.annotation.Bean;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.ProviderManager;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;

@Component
public class SecurityBeansConfig {
    @Bean
    public AuthenticationManager authenticationManager(UserDetailsService userDetailsService, PasswordEncoder passwordEncoder) {
        // 基于用户详情的认证Provider
        DaoAuthenticationProvider daoAuthProvider = new DaoAuthenticationProvider();
        daoAuthProvider.setUserDetailsService(userDetailsService);
        daoAuthProvider.setPasswordEncoder(passwordEncoder);

        // 可添加多个Provider,比如OAuth2、LDAP等
        return new ProviderManager(daoAuthProvider);
    }
}

配合SecurityFilterChain使用

无论采用哪种方式获取AuthenticationManager,都需要同时配置SecurityFilterChain来定义请求的认证规则(替代原有的configure(HttpSecurity)方法):

import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.stereotype.Component;

@Component
public class SecurityFilterChainConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/public/**").permitAll() // 公开路径
                .anyRequest().authenticated() // 其他路径需认证
            )
            .formLogin(form -> form // 表单登录配置
                .loginPage("/login")
                .permitAll()
            )
            .logout(logout -> logout.permitAll());

        return http.build();
    }
}

关于AuthenticationManagerBuilder的注意事项

你之前尝试注入AuthenticationManagerBuilder报错,是因为在6.0版本中,AuthenticationManagerBuilder不再推荐直接注入使用。它通常是在SecurityFilterChain的配置lambda中,通过http.getSharedObject(AuthenticationManagerBuilder.class)来获取并配置,或者直接通过上述两种方式构建AuthenticationManagerBean,Spring会自动将其纳入安全上下文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:32:19