此版本仍在开发中,尚未被视为稳定版本。如需最新稳定版本,请使用 Spring Security 7.0.4spring-doc.cadn.net.cn

获取 Spring Security

本节介绍如何获取 Spring Security 的二进制文件。 有关如何获取源代码,请参阅源代码spring-doc.cadn.net.cn

发布版本号

Spring Security 的版本格式为 MAJOR.MINOR.PATCH,具体如下:spring-doc.cadn.net.cn

  • 主版本(MAJOR versions)可能包含破坏性变更。 通常,这些变更是为了提供更佳的安全性,以符合现代安全实践。spring-doc.cadn.net.cn

  • 次要版本包含功能增强,但被视为被动更新。spring-doc.cadn.net.cn

  • PATCH 级别应当前后完全兼容,可能的例外情况是修复 bug 所做的更改。spring-doc.cadn.net.cn

用法

与大多数开源项目一样,Spring Security 将其依赖项以 Maven 工件的形式发布,使其同时兼容 Maven 和 Gradle。以下章节将演示如何将 Spring Security 与这些构建工具集成,并分别提供 Spring Boot 和独立使用的示例。spring-doc.cadn.net.cn

Spring Boot

Spring Boot 提供了一个 spring-boot-starter-security 起步依赖,用于聚合 Spring Security 相关的依赖项。 使用该起步依赖最简单且推荐的方式是通过 IDE 集成(EclipseIntelliJNetBeans)或通过 start.spring.io 使用 Spring Initializr。 此外,您也可以手动添加该起步依赖,如下例所示:spring-doc.cadn.net.cn

pom.xml
<dependencies>
	<!-- ... other dependency elements ... -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-security</artifactId>
	</dependency>
</dependencies>
build.gradle
dependencies {
	implementation "org.springframework.boot:spring-boot-starter-security"
}

由于 Spring Boot 提供了一个 Maven BOM(物料清单)来管理依赖版本,因此您无需指定版本号。 如果您希望覆盖 Spring Security 的版本,可以通过构建属性进行设置,如下所示:spring-doc.cadn.net.cn

pom.xml
<properties>
	<!-- ... -->
	<spring-security.version>7.1.0-M3</spring-security.version>
</properties>
build.gradle
ext['spring-security.version']='7.1.0-M3'

由于 Spring Security 仅在主版本发布时才会引入破坏性变更,因此你可以安全地在 Spring Boot 中使用较新版本的 Spring Security。 然而,有时你也可能需要同时更新 Spring Framework 的版本。 你可以通过添加如下构建属性来实现:spring-doc.cadn.net.cn

pom.xml
<properties>
	<!-- ... -->
	<spring.version>7.0.6</spring.version>
</properties>
build.gradle
ext['spring.version']='7.0.6'

如果您使用了额外的功能(例如 LDAP、OAuth 2 等),还需要包含相应的项目模块和依赖项spring-doc.cadn.net.cn

独立使用(无需 Spring Boot)

当你在不使用 Spring Boot 的情况下使用 Spring Security 时,推荐的方式是使用 Spring Security 的 BOM(物料清单),以确保在整个项目中使用一致的 Spring Security 版本。spring-doc.cadn.net.cn

pom.xml
<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>
build.gradle
plugins {
	id "io.spring.dependency-management" version "1.0.6.RELEASE"
}

dependencyManagement {
	imports {
		mavenBom 'org.springframework.security:spring-security-bom:7.1.0-M3'
	}
}
Spring 为 Gradle 提供了一个 Dependency Management Plugin

一个最小的 Spring Security Maven 依赖集通常如下例所示:spring-doc.cadn.net.cn

pom.xml
<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>
build.gradle
dependencies {
	implementation "org.springframework.security:spring-security-web"
	implementation "org.springframework.security:spring-security-config"
}

如果您使用了额外的功能(例如 LDAP、OAuth 2 等),还需要包含相应的项目模块和依赖项spring-doc.cadn.net.cn

Spring Security 基于 Spring Framework 7.0.6 构建,但通常应与任何更新的 Spring Framework 5.x 版本兼容。 许多用户可能会遇到这样一个问题:Spring Security 的传递依赖会解析为 Spring Framework 7.0.6,这可能导致奇怪的类路径问题。 解决此问题最简单的方法是在您的 pom.xml 中的 <dependencyManagement> 部分或 build.gradle 中的 dependencyManagement 部分使用 spring-framework-bomspring-doc.cadn.net.cn

pom.xml
<dependencyManagement>
	<dependencies>
		<!-- ... other dependency elements ... -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-framework-bom</artifactId>
			<version>7.0.6</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>
build.gradle
plugins {
	id "io.spring.dependency-management" version "1.0.6.RELEASE"
}

dependencyManagement {
	imports {
		mavenBom 'org.springframework:spring-framework-bom:7.0.6'
	}
}
Spring 为 Gradle 提供了一个 Dependency Management Plugin

上述示例确保 Spring Security 的所有传递依赖都使用 Spring 7.0.6 模块。spring-doc.cadn.net.cn

此方法使用 Maven 的“物料清单”(BOM)概念,仅在 Maven 2.0.9 及更高版本中可用。 有关依赖项解析方式的更多详细信息,请参阅Maven 依赖机制简介文档spring-doc.cadn.net.cn

Maven 仓库

所有GA版本均已部署到Maven Central,因此您无需在构建配置中声明额外的Maven仓库。spring-doc.cadn.net.cn

对于 Gradle,使用 mavenCentral() 仓库就足以获取 GA 版本。spring-doc.cadn.net.cn

build.gradle
repositories {
	mavenCentral()
}

如果你使用的是 SNAPSHOT 版本,则需要确保已定义 Spring 快照仓库:spring-doc.cadn.net.cn

pom.xml
<repositories>
	<!-- ... possibly other repository elements ... -->
	<repository>
		<id>spring-snapshot</id>
		<name>Spring Snapshot Repository</name>
		<url>https://repo.spring.io/snapshot</url>
	</repository>
</repositories>
build.gradle
repositories {
	maven { url 'https://repo.spring.io/snapshot' }
}

如果你使用的是里程碑版本或发布候选版本,则需要确保已定义 Spring Milestone 仓库,如下例所示:spring-doc.cadn.net.cn

pom.xml
<repositories>
	<!-- ... possibly other repository elements ... -->
	<repository>
		<id>spring-milestone</id>
		<name>Spring Milestone Repository</name>
		<url>https://repo.spring.io/milestone</url>
	</repository>
</repositories>
build.gradle
repositories {
	maven { url 'https://repo.spring.io/milestone' }
}