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

Spring Security 6.1中sessionManagement等方法过时的解决方案咨询

解决Spring Security 6.1中sessionManagement()、and()、csrf()、cors()方法过时问题

Spring Security 6.x版本全面采用Lambda式配置,废弃了旧的链式and()调用及部分传统方法。以下是针对你的配置文件的修复方案及说明:

核心修改点

  • 移除and(): 无需再用and()连接不同配置块,每个安全特性直接通过Lambda表达式独立配置。
  • Session管理: 使用sessionManagement(SessionManagementConfigurer)的Lambda重载替代旧链式调用。
  • CSRF配置: 通过csrf(CsrfConfigurer)Lambda表达式禁用CSRF。
  • CORS配置: 用Lambda实现CorsConfigurationSource替代匿名内部类,再通过cors(CorsConfigurer)完成配置。

修正后的完整代码

package com.example.config;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
import org.springframework.web.cors.CorsConfiguration;
import java.util.Arrays;
import java.util.Collections;

@Configuration
@EnableWebSecurity
public class AppConfig {
    
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            // 配置无状态会话
            .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
            // 请求授权规则
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/api/**").authenticated()
                .anyRequest().permitAll())
            // 添加JWT验证过滤器
            .addFilterBefore(new jwtValidator(), BasicAuthenticationFilter.class)
            // 禁用CSRF
            .csrf(csrf -> csrf.disable())
            // 配置CORS
            .cors(cors -> cors.configurationSource(request -> {
                CorsConfiguration cfg = new CorsConfiguration();
                cfg.setAllowedOrigins(Arrays.asList("http://localhost:3000", "http://localhost:4200"));
                cfg.setAllowedMethods(Collections.singletonList("*"));
                cfg.setAllowCredentials(true);
                cfg.setAllowedHeaders(Collections.singletonList("*"));
                cfg.setExposedHeaders(Arrays.asList("Authorization"));
                cfg.setMaxAge(3600L);
                return cfg;
            }));
        
        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

关键细节说明

  1. Session管理: 用sessionManagement(session -> ...)替代原sessionManagement().sessionCreationPolicy(...).and(),Lambda内直接指定会话策略。
  2. CSRF: csrf(csrf -> csrf.disable())是6.x版本禁用CSRF的标准写法,替代旧的csrf().disable()。
  3. CORS: 将匿名内部类实现的CorsConfigurationSource替换为Lambda表达式,简化代码同时保持原有规则不变。
  4. Lambda配置: 所有配置块通过Lambda实现,代码结构更清晰,完全符合Spring Security 6.x的设计规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:13:12