获取 Spring Security
本节介绍如何获取 Spring Security 二进制文件。关于如何获取源代码,请参阅源代码。
版本编号
Spring Security 版本遵循 MAJOR.MINOR.PATCH 格式,例如:
-
主版本 可能包含破坏性变更。通常,这些变更是为了提供改进的安全性以符合现代安全实践。
-
次版本 包含功能增强,但被视为被动更新。
-
补丁版本 应完全向前和向后兼容,修复错误的变更可能例外。
使用方法
与大多数开源项目一样,Spring Security 将其依赖项部署为 Maven 构件,这使得它们与 Maven 和 Gradle 都能兼容。以下部分将演示如何将 Spring Security 与这些构建工具集成,并提供 Spring Boot 和独立使用的示例。
Spring Boot
Spring Boot 提供了一个 spring-boot-starter-security starter,它聚合了与 Spring Security 相关的依赖项。使用该 starter 最简单且首选的方式是通过 IDE 集成(例如 Eclipse、IntelliJ 或 NetBeans)使用 Spring Initializr,或者通过 start.spring.io 来使用。或者,你也可以手动添加该 starter,如下例所示:
- Maven
- Gradle
<dependencies>
<!-- ... other dependency elements ... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
dependencies {
implementation "org.springframework.boot:spring-boot-starter-security"
}
由于 Spring Boot 提供了 Maven BOM 来管理依赖版本,您无需指定版本。如果您希望覆盖 Spring Security 版本,可以通过构建属性实现,如下所示:
- Maven
- Gradle
<properties>
<!-- ... -->
<spring-security.version>7.0.2</spring-security.version>
</properties>
ext['spring-security.version']='7.0.2'
由于 Spring Security 仅在主要版本中进行破坏性变更,您可以安全地在 Spring Boot 中使用较新版本的 Spring Security。但有时,您可能还需要更新 Spring Framework 的版本。您可以通过添加如下构建属性来实现:
- Maven
- Gradle
<properties>
<!-- ... -->
<spring.version>7.0.2</spring.version>
</properties>
ext['spring.version']='7.0.2'
如果您使用了额外功能(例如 LDAP、OAuth 2 等),您还需要包含相应的项目模块与依赖项。
独立使用(无需 Spring Boot)
当你在没有Spring Boot的情况下使用Spring Security时,推荐的方式是使用Spring Security的BOM(物料清单)来确保整个项目中使用的Spring Security版本保持一致。
- Maven
- Gradle
<dependencyManagement>
<dependencies>
<!-- ... other dependency elements ... -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-bom</artifactId>
<version>{spring-security-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
plugins {
id "io.spring.dependency-management" version "1.0.6.RELEASE"
}
dependencyManagement {
imports {
mavenBom 'org.springframework.security:spring-security-bom:7.0.2'
}
}
Spring 为 Gradle 提供了一个 依赖管理插件
一个最小化的 Spring Security Maven 依赖集通常如下例所示:
- Maven
- Gradle
<dependencies>
<!-- ... other dependency elements ... -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>
</dependencies>
dependencies {
implementation "org.springframework.security:spring-security-web"
implementation "org.springframework.security:spring-security-config"
}
如果您使用了额外功能(例如 LDAP、OAuth 2 等),则还需要包含相应的项目模块与依赖项。
Spring Security 基于 Spring Framework 7.0.2 构建,但通常应能与 Spring Framework 5.x 的任何更新版本兼容。许多用户可能会遇到 Spring Security 的传递依赖解析为 Spring Framework 7.0.2 的问题,这可能导致奇怪的类路径问题。最简单的解决方法是在 pom.xml 的 <dependencyManagement> 部分或 build.gradle 的 dependencyManagement 部分中使用 spring-framework-bom。
- Maven
- Gradle
<dependencyManagement>
<dependencies>
<!-- ... other dependency elements ... -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>7.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
plugins {
id "io.spring.dependency-management" version "1.0.6.RELEASE"
}
dependencyManagement {
imports {
mavenBom 'org.springframework:spring-framework-bom:7.0.2'
}
}
Spring 为 Gradle 提供了一个 依赖管理插件
前面的示例确保 Spring Security 的所有传递依赖都使用 Spring 7.0.2 模块。
此方法使用 Maven 的“物料清单”(BOM)概念,仅适用于 Maven 2.0.9 及以上版本。有关依赖项解析的更多详细信息,请参阅 Maven 依赖机制介绍文档。
Maven 仓库
所有GA版本都会部署到Maven Central,因此您无需在构建配置中声明额外的Maven仓库。
对于使用Gradle的情况,mavenCentral() 仓库足以获取GA版本。
repositories {
mavenCentral()
}
如果你使用的是 SNAPSHOT 版本,需要确保已配置 Spring Snapshot 仓库:
- Maven
- Gradle
<repositories>
<!-- ... possibly other repository elements ... -->
<repository>
<id>spring-snapshot</id>
<name>Spring Snapshot Repository</name>
<url>https://repo.spring.io/snapshot</url>
</repository>
</repositories>
repositories {
maven { url 'https://repo.spring.io/snapshot' }
}
如果您使用的是里程碑版或候选发布版,需要确保已配置Spring里程碑仓库,如下例所示:
- Maven
- Gradle
<repositories>
<!-- ... possibly other repository elements ... -->
<repository>
<id>spring-milestone</id>
<name>Spring Milestone Repository</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
repositories {
maven { url 'https://repo.spring.io/milestone' }
}