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

Spring Boot 3.2.3替换已弃用WebSecurityConfigurerAdapter的方案

Spring Boot 3.2.3 替换WebSecurityConfigurerAdapter的配置方案

你的旧代码核心是配置自定义UserDetailsService用于身份认证,同时使用明文密码编码器(NoOpPasswordEncoder,仅适合教学演示,生产环境严禁使用)。在Spring Boot 3.2.3(对应Spring Security 6.x)中,WebSecurityConfigurerAdapter已被移除,需要改用基于Bean的配置方式,以下是等价实现:

package ru.alishov.springcourse.FirstSecurityApp.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import ru.alishov.springcourse.FirstSecurityApp.services.PersonDetailsService;

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    private final PersonDetailsService personDetailsService;

    // 构造器注入(和旧代码保持一致,Spring推荐的依赖注入方式)
    public SecurityConfig(PersonDetailsService personDetailsService) {
        this.personDetailsService = personDetailsService;
    }

    // 配置HTTP安全规则,替代原configure(HttpSecurity)方法
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        // 默认开启表单登录、HTTP Basic认证,要求所有请求必须经过认证
        http
                .authorizeHttpRequests(auth -> auth
                        .anyRequest().authenticated()
                )
                .formLogin(form -> form.permitAll()); // 放行登录相关请求,否则无法访问登录页面

        return http.build();
    }

    // 获取AuthenticationManager,替代原configure(AuthenticationManagerBuilder)方法
    @Bean
    public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception {
        return authConfig.getAuthenticationManager();
    }

    // 保留原密码编码器Bean,注意:NoOpPasswordEncoder为明文存储,仅用于教学演示!
    @Bean
    public PasswordEncoder passwordEncoder() {
        return NoOpPasswordEncoder.getInstance();
    }
}

关键改动说明:

  • 移除WebSecurityConfigurerAdapter继承:改用@Configuration + @EnableWebSecurity注解,通过定义SecurityFilterChain Bean来配置HTTP安全规则
  • 替换身份认证管理器配置:通过AuthenticationConfiguration获取AuthenticationManager,Spring会自动关联你注入的PersonDetailsService
  • 显式定义SecurityFilterChain:旧版configure(HttpSecurity)中的逻辑全部迁移到这个Bean中,示例保留了默认的表单登录和全局认证规则,你可以根据课程需求添加更多规则(比如放行静态资源、指定自定义登录页等)
  • 规范Bean命名:将原getPasswordEncoder()简化为passwordEncoder(),不影响功能但更符合Spring Bean命名习惯

⚠️ 重要提醒:NoOpPasswordEncoder是明文存储密码,绝对不能用于生产环境,教学演示后记得替换为BCryptPasswordEncoder等安全的密码编码器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:56:07