# 获得 Spring 安全性

本节讨论了有关获得 Spring 安全性二进制文件所需了解的所有信息。有关如何获得源代码,请参见源代码

# 发行版本编号

Spring 安全版本的格式为 major.minor.patch,例如:

  • 主要的版本可能包含断开的更改。通常,这样做是为了提供与现代安全实践相匹配的改进的安全性。

  • 小版本包含增强功能,但被视为被动更新。

  • 补丁级别应该是完全兼容的,向前和向后,可能的例外情况是修复错误的更改。

# Maven 的用法

与大多数开源项目一样, Spring Security 将其依赖关系部署为 Maven 工件。本节中的主题提供了有关在使用 Maven 时如何使用 Spring 安全性的详细信息。

# Spring 用 Maven 引导

Spring Boot 提供了一个spring-boot-starter-security启动器,该启动器将 Spring 与安全相关的依赖关系聚合在一起。使用启动器的最简单和首选的方法是通过使用 IDE 集成(Eclipse (opens new window)IntelliJ (opens new window)NetBeans (opens new window))或通过https://start.spring.io (opens new window)使用Spring Initializr (opens new window)

或者,你也可以手动添加启动器,如下例所示:

例 1。 POM.xml

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

由于 Spring 启动提供了一个 Maven BOM 来管理依赖版本,因此你不需要指定版本。如果你希望重写 Spring 安全版本,那么可以通过提供 Maven 属性来实现,如下例所示:

例 2。 POM.xml

<properties>
	<!-- ... -->
	<spring-security.version>5.6.2</spring-security.version>
</properties>

由于 Spring 安全性仅在主要版本中进行破坏更改,因此使用具有 Spring 启动的 Spring 安全性的较新版本是安全的。然而,有时你可能还需要更新 Spring Framework 的版本。你可以通过添加一个 Maven 属性来做到这一点,如下例所示:

例 3。 POM.xml

<properties>
	<!-- ... -->
	<spring.version>5.3.16</spring.version>
</properties>

如果使用额外的功能(例如 LDAP、OpenID 和其他功能),还需要包括适当的项目模块和依赖项

# Maven 没有靴子

当使用 Spring 安全性而不启动 Spring 时,首选的方法是使用 Spring 安全性的 BOM,以确保在整个项目中使用 Spring 安全性的一致版本。下面的示例展示了如何做到这一点:

例 4。 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 安全性 Maven 依赖关系通常如下所示:

例 5。 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、OpenID 和其他功能),则还需要包括适当的项目模块和依赖项

Spring 安全性是根据 Spring Framework5.3.16 构建的,但通常应该与 Spring Framework5.x 的任何较新版本一起工作。 Spring 安全性的传递依赖关系解决了 Spring Framework5.3.16,这可能会导致奇怪的 Classpath 问题,许多用户可能会对此感到不满。解决此问题的最简单方法是使用spring-framework-bom<dependencyManagement>部分中的pom.xml,如下例所示:

例 6。 POM.xml

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

前面的示例确保 Spring 安全性的所有传递依赖使用 Spring 5.3.16 模块。

这种方法使用 Maven 的“物料清单”概念,并且仅在 Maven 2.0.9+ 中可用。
有关如何解决依赖关系的更多详细信息,请参见Maven’s Introduction to the Dependency Mechanism documentation (opens new window)

# Maven 存储库

所有 GA 版本(即以.release 结尾的版本)都部署到 Maven Central,因此不需要在 POM 中声明额外的 Maven 存储库。

如果使用快照版本,则需要确保定义了 Spring 快照存储库,如下例所示:

例 7。 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 里程碑存储库,如下例所示:

例 8。 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 安全性的详细信息。

# Spring 用 Gradle 引导

Spring 引导提供了一个spring-boot-starter-security启动器,该启动器将 Spring 安全相关的依赖关系聚合在一起。使用启动器的最简单和首选方法是通过使用 IDE 集成(Eclipse (opens new window)IntelliJ (opens new window)NetBeans (opens new window))或通过https://start.spring.io (opens new window)使用Spring Initializr (opens new window)

或者,你也可以手动添加启动器,如下例所示:

示例 9.build. Gradle

dependencies {
	compile "org.springframework.boot:spring-boot-starter-security"
}

由于 Spring 启动提供了一个 Maven BOM 来管理依赖版本,所以不需要指定版本。如果你希望重写 Spring 安全版本,那么可以通过提供 Gradle 属性来实现,如下例所示:

示例 10.构建。 Gradle

ext['spring-security.version']='5.6.2'

由于 Spring 安全性仅在主要版本中进行破坏更改,因此使用具有 Spring 启动的 Spring 安全性的较新版本是安全的。然而,有时你可能还需要更新 Spring 框架的版本。你可以通过添加一个 Gradle 属性来做到这一点,如下例所示:

示例 11.build. Gradle

ext['spring.version']='5.3.16'

如果你使用了额外的功能(例如 LDAP、OpenID 和其他功能),则还需要包括适当的项目模块和依赖项

# Gradle 没有靴子

当使用 Spring 安全性而不启动 Spring 时,首选的方法是使用 Spring 安全性的 BOM,以确保在整个项目中使用 Spring 安全性的一致版本。你可以通过使用依赖管理插件 Name (opens new window)来实现这一点,如下例所示:

例 12.build. Gradle

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

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

Spring 安全性 Maven 依赖性的最小集合通常如下所示:

例 13.build. Gradle

dependencies {
	compile "org.springframework.security:spring-security-web"
	compile "org.springframework.security:spring-security-config"
}

如果你使用了额外的功能(例如 LDAP、OpenID 和其他功能),则还需要包括适当的项目模块和依赖项

Spring 安全性是根据 Spring Framework5.3.16 构建的,但通常应该与 Spring Framework5.x 的任何较新版本一起工作。 Spring 安全性的传递依赖关系解决了 Spring Framework5.3.16,这可能会导致奇怪的 Classpath 问题,许多用户可能会对此感到不满。解决此问题的最简单方法是在pom.xml<dependencyManagement>部分中使用spring-framework-bom。你可以通过使用依赖管理插件 Name (opens new window)来实现这一点,如下例所示:

示例 14.build. Gradle

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

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

前面的示例确保 Spring 安全性的所有传递依赖使用 Spring 5.3.16 模块。

# Gradle 存储库

所有 GA 版本(即以.release 结尾的版本)都部署到 Maven Central,因此对于 GA 版本,使用 MavenCentral()存储库就足够了。下面的示例展示了如何做到这一点:

例 15.build. Gradle

repositories {
	mavenCentral()
}

如果使用快照版本,则需要确保定义了 Spring 快照存储库,如下例所示:

示例 16.build. Gradle

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

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

示例 17.build. Gradle

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