我写这篇文章的对象是 正在使用 Spring Framework 的开发者,尤其是刚接触 Spring Security 的同学。很多人在项目中会遇到依赖冲突或者 API 版本不兼容的问题,本篇文章总结了 Spring 核心模块 spring-core 与 Spring Security 的兼容版本关系,并提供实际的依赖配置方法,帮助你少踩坑。
1. 为什么要关注版本兼容性?
Spring Security 与 Spring Framework 是紧密配合的两个组件。如果版本不匹配,很可能出现以下问题:
- 项目启动时报错:
NoSuchMethodError
、ClassNotFoundException
- Spring Security 的配置类或注解无法识别
- Gradle/Maven 依赖树中存在多个冲突版本
因此,在使用前确认版本兼容性,是保证项目稳定运行的重要步骤。
2. Spring 与 Spring Security 版本对应关系
根据官方文档与实际项目经验,常见的兼容关系如下:
-
Spring Framework 4.x
对应 Spring Security 3.2.x – 4.2.x
推荐使用 Spring Security 4.2.x(最终稳定版本)。 -
Spring Framework 5.x
对应 Spring Security 5.x
新增了对 WebFlux 的响应式支持,适合现代应用。 -
Spring Framework 6.x
必须使用 Spring Security 6.x
因为 Spring 6 已经迁移到 Jakarta EE,旧版 Security 已无法兼容。
3. 如何检查版本兼容性?
3.1 查阅官方文档
Spring 官方提供了详细的 Release Notes:
3.2 使用 Spring Boot 依赖管理
如果你的项目是基于 Spring Boot 的,那么推荐让 Boot 管理依赖。例如 Spring Boot 3.2.4 的依赖配置如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.2.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
此时只需要引入 Spring Security,而无需写明版本:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
3.3 Maven/Gradle 检查依赖树
-
Maven 命令:
mvn dependency:tree
-
Gradle 命令:
gradle dependencies
通过依赖树可以快速发现是否存在多个版本的 Spring Security 或 Spring Core。
4. 示例:Spring 5.x 项目引入 Spring Security 5.x
以下是一个基于 Maven 的简单依赖示例,适合 Spring 5.x 项目:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.30</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.8.9</version>
</dependency>
这里
spring-core:5.3.30
对应spring-security:5.8.9
,这是一个常见且稳定的组合。
5. 总结
- Spring 4.x → Spring Security 3.2.x – 4.2.x(推荐 4.2.x)
- Spring 5.x → Spring Security 5.x
- Spring 6.x → Spring Security 6.x
建议:
- 初学者使用 Spring Boot 来简化依赖管理。
- 老项目升级时,要重点关注 Spring Framework 与 Spring Security 的大版本对应关系。
6. 结束语
本文主要帮助刚接触 Spring Security 的同学快速确认 Spring Framework 与 Spring Security 的兼容版本,避免项目启动时遇到一堆难以排查的错误。