获取 Spring Security

本节介绍如何获取 Spring Security 的二进制文件。有关如何获取源代码的信息,请参见源代码

版本编号

Spring Security 版本号格式为 MAJOR.MINOR.PATCH,其中

  • MAJOR 版本可能包含重大变更。通常,这些变更旨在提供符合现代安全实践的增强安全性。

  • MINOR 版本包含增强功能,但被认为是平缓更新。

  • PATCH 版本应完全向前和向后兼容,但修复 Bug 的变更除外。

使用

与大多数开源项目一样,Spring Security 将其依赖项发布为 Maven Artifact,这使得它们与 Maven 和 Gradle 都兼容。以下章节演示了如何将 Spring Security 与这些构建工具集成,并提供了 Spring Boot 和独立使用的示例。

Spring Boot

Spring Boot 提供了 spring-boot-starter-security 启动器,它聚合了与 Spring Security 相关的依赖项。使用该启动器最简单且首选的方式是使用 Spring Initializr,可以通过 IDE 集成(EclipseIntelliJNetBeans)或通过 start.spring.io 来使用。此外,您也可以手动添加启动器,如下例所示

  • Maven

  • Gradle

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 版本,可以使用构建属性来实现,如下所示

  • Maven

  • Gradle

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

由于 Spring Security 仅在主要版本中引入重大变更,因此您可以安全地在 Spring Boot 中使用更新版本的 Spring Security。然而,有时您可能还需要更新 Spring Framework 的版本。您可以通过添加如下构建属性来实现

  • Maven

  • Gradle

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

如果您使用了附加功能(例如 LDAP、OAuth 2 等),您还需要包含相应的项目模块和依赖项

独立使用(不使用 Spring Boot)

当您在不使用 Spring Boot 的情况下使用 Spring Security 时,首选方法是使用 Spring Security 的 BOM,以确保整个项目中使用的 Spring Security 版本一致。

  • Maven

  • Gradle

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:6.4.5'
	}
}
Spring 为 Gradle 提供了一个依赖管理插件

一个最小的 Spring Security Maven 依赖集通常如下例所示

  • Maven

  • Gradle

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 Security 是基于 Spring Framework 6.2.6 构建的,但通常应与任何更新的 Spring Framework 5.x 版本兼容。许多用户可能会遇到 Spring Security 的传递依赖项解析到 Spring Framework 6.2.6 的问题,这可能导致奇怪的 classpath 问题。解决此问题的最简单方法是在您的 pom.xml<dependencyManagement> 部分或您的 build.gradledependencyManagement 部分中使用 spring-framework-bom

  • Maven

  • Gradle

pom.xml
<dependencyManagement>
	<dependencies>
		<!-- ... other dependency elements ... -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-framework-bom</artifactId>
			<version>6.2.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:6.2.6'
	}
}
Spring 为 Gradle 提供了一个依赖管理插件

前面的示例确保 Spring Security 的所有传递依赖项都使用 Spring 6.2.6 模块。

这种方法使用了 Maven 的“物料清单”(BOM)概念,仅在 Maven 2.0.9+ 版本中可用。有关依赖项如何解析的更多详细信息,请参阅Maven 的依赖机制介绍文档

Maven 仓库

所有GA 版本都已部署到 Maven Central,因此您无需在构建配置中声明额外的 Maven 仓库。

对于 Gradle,使用 mavenCentral() 仓库足以满足 GA 版本需求。

build.gradle
repositories {
	mavenCentral()
}

如果您使用 SNAPSHOT 版本,您需要确保定义了 Spring Snapshot 仓库

  • Maven

  • Gradle

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 仓库,如下例所示

  • Maven

  • Gradle

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' }
}