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

Spring Boot 3.1.1中Spring Security过时方法的替代方案咨询

Spring Boot 3.1.1 Spring Security 过时方法替代方案

以下是适配Spring Boot 3.1.1(对应Spring Security 6.1+)的完整配置代码,替换所有过时方法:

@Configuration
public class SecurityConfig {

    private static final String ADMIN = "ADMIN";
    private static final String USER = "USER";

    @Autowired
    private AuthenticationManager authenticationManager;

    @Bean
    public AuthenticationManager authManager(AuthenticationManagerBuilder authBuilder,
                                             UserDetailsService userDetailsService,
                                             BCryptPasswordEncoder bCryptPasswordEncoder) throws Exception {
        authBuilder.userDetailsService(userDetailsService)
                   .passwordEncoder(bCryptPasswordEncoder);
        return authBuilder.build();
    }

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            // 禁用CSRF
            .csrf(csrf -> csrf.disable())
            // 配置无状态会话
            .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
            // 配置跨域
            .cors(cors -> cors.configurationSource(request -> {
                CorsConfiguration config = new CorsConfiguration();
                config.setAllowedOrigins(Collections.singletonList("http://localhost:4200"));
                config.setAllowedMethods(Collections.singletonList("*"));
                config.setAllowCredentials(true);
                config.setAllowedHeaders(Collections.singletonList("*"));
                config.setExposedHeaders(List.of("Authorization"));
                config.setMaxAge(3600L);
                return config;
            }))
            // 配置请求授权规则
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/login").permitAll()
                .requestMatchers(HttpMethod.GET, "/api/v1/list/**").permitAll()
                .requestMatchers(HttpMethod.DELETE, "/api/v1/delete/**").hasAuthority(ADMIN)
                .requestMatchers(HttpMethod.PUT, "/api/v1/update/**").hasAuthority(ADMIN)
                .requestMatchers(HttpMethod.GET, "/api/v1/get/**").hasAnyAuthority(ADMIN, USER)
                .anyRequest().authenticated()
            )
            // 添加JWT认证过滤器
            .addFilterBefore(new JWTAuthenticationFilter(authenticationManager), UsernamePasswordAuthenticationFilter.class)
            // 添加JWT授权过滤器
            .addFilterBefore(new JWTAuthorizationFilter(), UsernamePasswordAuthenticationFilter.class);

        return http.build();
    }

    // 若未注册BCryptPasswordEncoder,需添加此Bean
    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

关键过时方法替代说明

  • AuthenticationManager构建的.and().build():
    原通过HttpSecurity.getSharedObject()获取构建器的方式已过时,改为直接注入AuthenticationManagerBuilder实例,配置用户详情服务和密码编码器后调用build()即可生成认证管理器。

  • csrf():
    原csrf().disable()链式调用替换为lambda配置csrf(csrf -> csrf.disable()),这是Spring Security 6+推荐的DSL写法,无需用.and()连接后续配置。

  • sessionManagement():
    原sessionManagement().sessionCreationPolicy(...).and()替换为sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)),用lambda封装会话管理逻辑。

  • authorizeHttpRequests():
    原授权规则的链式调用改为在authorizeHttpRequests(auth -> {...})的lambda内部完成所有规则配置,无需.and()分隔。

  • 全局.and():
    Spring Security 6+全面采用lambda DSL替代传统的.and()链式调用,每个配置块(如csrf、sessionManagement等)都通过lambda传入配置逻辑,代码结构更简洁易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:42:40