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(); } }
关键细节说明
- Session管理: 用
sessionManagement(session -> ...)替代原sessionManagement().sessionCreationPolicy(...).and(),Lambda内直接指定会话策略。 - CSRF:
csrf(csrf -> csrf.disable())是6.x版本禁用CSRF的标准写法,替代旧的csrf().disable()。 - CORS: 将匿名内部类实现的
CorsConfigurationSource替换为Lambda表达式,简化代码同时保持原有规则不变。 - Lambda配置: 所有配置块通过Lambda实现,代码结构更清晰,完全符合Spring Security 6.x的设计规范。
内容的提问来源于stack exchange,提问作者user23542176
相关产品推荐
相关产品推荐

