Getting Spring Security

  • Spring Security 提供Maven和Gradle工件,允许用户通过依赖管理轻松集成Spring Security。

  • 对于 Spring Boot 应用程序,使用 spring-boot-starter-security 启动器是首选方法。

  • 对于非 Spring Boot 应用程序,建议使用 Spring Security BOM 来管理依赖项版本并确保一致使用 Spring Security 版本。

  • Spring Security 应与 Spring Framework 5.x 版本一起使用,但传递依赖项可能会导致类路径问题,可以使用 spring-framework-bom 来解决。

此小节介绍如何获取 Spring Security 二进制文件。请参阅 Source Code了解如何获取源代码。

Release Numbering

Spring Security 版本遵循 MAJOR.MINOR.PATCH 这样的格式:

  • 重大版本可能包含重大更改。通常,这样做是为了提供改进的安全性,以匹配现代安全实践。

  • 次要版本包含增强功能,但被认为是被动更新。

  • 补丁级别应向前和向后完美兼容,但修复错误的更改除外。

Usage with Maven

与大多数开源项目一样,Spring Security 将其依赖项部署为 Maven 工件。本部分中的主题说明如何在使用 Maven 时使用 Spring Security。

Spring Boot with Maven

Spring Boot 提供将与 Spring Security 相关的依赖项聚合在一起的 spring-boot-starter-security 启动器,最简单、最推荐的使用启动器的方式是通过 IDE 集成 ( EclipseIntelliJNetBeans) 或通过 [role="bare"][role="bare"]https://start.spring.io 使用 Spring Initializr。或者,你可以手动添加启动器,如下面的示例所示:

pom.xml
<dependencies>
	<!-- ... other dependency elements ... -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-security</artifactId>
	</dependency>
</dependencies>

由于 Spring Boot 提供了 Maven BOM 来管理依赖项版本,因此你无需指定版本。如果你希望覆盖 Spring Security 版本,可以通过提供 Maven 属性来进行覆盖:

pom.xml
<properties>
	<!-- ... -->
	<spring-security.version>{spring-security-version}</spring-security.version>
</properties>

由于 Spring Security 仅在主要版本中进行重大变更,因此你可以安全地在 Spring Boot 中使用 Spring Security 的较新版本。但是,有时你也可能需要更新 Spring Framework 的版本。你可以通过添加 Maven 属性来进行更新:

pom.xml
<properties>
	<!-- ... -->
	<spring.version>{spring-core-version}</spring.version>
</properties>

如果你使用附加功能(例如,LDAP、OAuth 2 和其他功能),则还需要包含相应的 Project Modules and Dependencies

Maven Without Spring Boot

在你未使用 Spring Boot 而使用 Spring Security 时,首选方式是使用 Spring Security 的 BOM,以确保在整个项目中使用了一致的 Spring Security 版本。以下示例展示了如何进行操作:

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>

Spring Security 的最小 Maven 依赖项集合通常如下例所示:

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>

如果你使用附加功能(例如,LDAP、OAuth 2 和其他功能),则还需要包含相应的 Project Modules and Dependencies

Spring Security 根据 Spring Framework {spring-core-version} 构建,但通常应可与任何较新版本的 Spring Framework 5.x 一起使用。许多用户可能会遇到 Spring Security 的传递依赖项解析 Spring Framework {spring-core-version} 的情况,这可能导致奇怪的类路径问题。解决此问题的最简单方法是在 pom.xml<dependencyManagement> 部分内使用 spring-framework-bom

pom.xml
<dependencyManagement>
	<dependencies>
		<!-- ... other dependency elements ... -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-framework-bom</artifactId>
			<version>{spring-core-version}</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

前面的示例可确保 Spring Security 的所有传递依赖项都使用 Spring {spring-core-version} 模块。

此方法使用 Maven 的 “bill of materials” (BOM) 概念,并且仅在 Maven 2.0.9+ 中可用,有关如何解决依赖项的其他详细信息,请参阅 Maven’s Introduction to the Dependency Mechanism documentation

Maven Repositories

所有 GA 版本(即以 .RELEASE 结尾的版本)均已部署到 Maven Central,因此你无需在 pom 中声明其他 Maven 存储库。

如果你使用 SNAPSHOT 版本,则需要确保已定义 Spring 快照存储库:

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>

如果你使用里程碑或候选版本,则需要确保已定义 Spring 里程碑存储库,如下例所示:

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>

Gradle

与大多数开源项目一样,Spring Security 将其依赖项作为 Maven 工件进行部署,从而允许对 Gradle 提供一流的支持。以下主题介绍了在使用 Gradle 时如何使用 Spring Security。

Spring Boot with Gradle

Spring Boot 提供将与 Spring Security 相关的依赖项聚合在一起的 spring-boot-starter-security 启动器,最简单、最推荐的使用启动器的方式是通过 IDE 集成 ( EclipseIntelliJNetBeans) 或通过 [role="bare"][role="bare"]https://start.spring.io 使用 Spring Initializr

或者,您可以手动添加起动器:

build.gradle
dependencies {
	implementation "org.springframework.boot:spring-boot-starter-security"
}

因为 Spring Boot 提供了一个 Maven BOM 来管理依赖项版本,所以您不需要指定一个版本。如果您希望覆盖 Spring Security 版本,则可以通过提供一个 Gradle 属性来实现:

build.gradle
ext['spring-security.version']='{spring-security-version}'

因为 Spring Security 仅在主要版本中进行重大更改,所以您可以安全地在 Spring Boot 中使用 Spring Security 的较新版本。但是,有时您可能还需要更新 Spring Framework 的版本。您可以通过添加一个 Gradle 属性来实现:

build.gradle
ext['spring.version']='{spring-core-version}'

如果你使用附加功能(例如,LDAP、OAuth 2 和其他功能),则还需要包含相应的 Project Modules and Dependencies

Gradle Without Spring Boot

在不使用 Spring Boot 的情况下使用 Spring Security 时,首选的方式是使用 Spring Security 的 BOM,以确保在整个项目中使用 Spring Security 的一致版本,可通过使用 Dependency Management Plugin 来实现:

build.gradle
plugins {
	id "io.spring.dependency-management" version "1.0.6.RELEASE"
}

dependencyManagement {
	imports {
		mavenBom 'org.springframework.security:spring-security-bom:{spring-security-version}'
	}
}

Spring Security 的最小 Maven 依赖项集合通常如下所示:

build.gradle
dependencies {
	implementation "org.springframework.security:spring-security-web"
	implementation "org.springframework.security:spring-security-config"
}

如果你使用附加功能(例如,LDAP、OAuth 2 和其他功能),则还需要包含相应的 Project Modules and Dependencies

Spring Security 根据 Spring Framework {spring-core-version} 构建,但通常应与任何较新版本的 Spring Framework 5.x 配合使用,许多用户可能会陷入 Spring Security 的传递性依赖项解析 Spring Framework {spring-core-version} 的事实,这可能会导致奇怪的类路径问题。解决此问题的最简单方法是在 build.gradledependencyManagement 部分中使用 spring-framework-bom。可通过使用 Dependency Management Plugin 来实现:

build.gradle
plugins {
	id "io.spring.dependency-management" version "1.0.6.RELEASE"
}

dependencyManagement {
	imports {
		mavenBom 'org.springframework:spring-framework-bom:{spring-core-version}'
	}
}

前面的示例可确保 Spring Security 的所有传递依赖项都使用 Spring {spring-core-version} 模块。

Gradle Repositories

所有 GA 版本(即以 .RELEASE 结尾的版本)都部署到 Maven Central,因此对于 GA 版本,使用 mavenCentral() 存储库就足够了。下面的示例演示了如何实现:

build.gradle
repositories {
	mavenCentral()
}

如果你使用 SNAPSHOT 版本,则需要确保已定义 Spring 快照存储库:

build.gradle
repositories {
	maven { url 'https://repo.spring.io/snapshot' }
}

如果您使用一个里程碑或候选版本,您需要确保定义了 Spring 里程碑存储库:

build.gradle
repositories {
	maven { url 'https://repo.spring.io/milestone' }
}