1. Spring Security 6.x 配置方案全面解析
如果你最近升级到Spring Security 6.x或Spring Boot 3.x,可能会发现熟悉的WebSecurityConfigurerAdapter类突然消失了。这不是你的错觉,而是Spring团队在6.0版本中做出的重大架构调整。作为长期使用Spring Security的开发者,我完全理解这种变化带来的困惑——网上资料鱼龙混杂,官方文档又过于简略。本文将带你完整走过新版本配置的每个环节,并分享我在实际项目中的踩坑经验。
新版本的核心变化在于采用了更现代的"组件化"配置方式,取代了传统的继承模式。这种改变带来了两个显著优势:一是减少了不必要的类继承层次,二是通过明确的Bean定义让安全配置更加透明。下面我们就从零开始构建一个完整的认证授权系统。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础环境搭建与依赖配置
2.1 依赖管理要点
在pom.xml中,我们仍然需要基础的security starter依赖,但要注意版本兼容性:
xml复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>3.1.0</version> <!-- 建议显式指定版本 -->
</dependency>
<!-- 如果使用JWT需要额外添加 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.5</version>
</dependency>
重要提示:Spring Boot 3.x默认使用Jakarta EE 9+规范,所有javax包名已改为jakarta。如果遇到类找不到的问题,请检查是否混用了旧版依赖。
2.2 自动配置的变化
新版本中,Spring Security的自动配置逻辑发生了以下关键变化:
- 默认启用了CSRF保护(需要手动关闭)
- 会话创建策略默认为IF_REQUIRED(不再是STATELESS)
- 所有端点默认需要认证(包括/error)
- 自动注册的PasswordEncoder变为DelegatingPasswordEncoder
这些默认行为的变化意味着,如果我们不进行显式配置,系统可能会表现出与旧版本完全不同的安全特性。
3. 核心安全配置详解
3.1 安全过滤器链配置
SecurityFilterChain是替代WebSecurityConfigurerAdapter的核心组件。下面是一个生产级配置示例:
java复制@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
// 禁用CSRF(REST API场景下通常不需要)
.csrf(csrf -> csrf.disable())
// 设置无状态会话(适用于JWT)
.sessionManagement(session -> session
.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
// 跨域配置
.cors(Customizer.withDefaults())
// 请求授权规则
.authorizeHttpRequests(auth -> auth
.requestMatchers("/auth/login").permitAll()
.requestMat
