获取 Spring Security

本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。

本节介绍了如何获得Spring Security的二进制文件。关于如何获得源码,请参见 源码

版本号

Spring Security版本的格式为 MAJOR.MINOR.PATCH。

  • MAJOR 版本可能包含破坏性变化。通常情况下,这些改动是为了提供更好的安全性,以符合现代安全实践。

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

  • PATCH 级别应该是完全兼容的,向前和向后,可能的例外是修复错误的变化。

在Maven中使用

与大多数开源项目一样,Spring Security以Maven工件的形式部署其依赖项。本节中的主题描述了在使用Maven时如何使用Spring Security。

Spring Boot 和 Maven

Spring Boot提供了一个 spring-boot-starter-security starter,聚合了Spring Security相关的依赖。使用starter的最简单和首选方式是通过使用IDE集成( EclipseIntelliJNetBeans)或通过 start.spring.io 使用 Spring Initializr。另外,你也可以手动添加starter,如下面的例子所示。

官方的 Spring Initializr 服务在国外,在国内经常不能访问。推荐使用 SpringBoot中文社区 提供的 start.springboot.io 镜像服务。
pom.xml
<dependencies>
	<!-- ... 其他依赖元素 ... -->
	<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>6.2.0-SNAPSHOT</spring-security.version>
</properties>

由于Spring Security只在主要(MAJOR)的版本中进行突破性的修改,所以你可以安全地在Spring Boot中使用较新版本的Spring Security。不过,有时你可能也需要更新Spring Framework的版本。您可以通过添加一个Maven属性来做到这一点。

pom.xml
<properties>
	<!-- ... -->
	<spring.version>6.1.0-M2</spring.version>
</properties>

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

没有使用 Spring Boot 的 Maven

当你在没有Spring Boot的情况下使用Spring Security时,首选方式是使用Spring Security的BOM,以确保在整个项目中使用一致的Spring Security版本。下面的例子展示了如何做到这一点。

pom.xml
<dependencyManagement>
	<dependencies>
		<!-- ... 其他依赖节点 ... -->
		<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>
	<!-- ... 其他依赖节点 ... -->
	<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 和其他),你还需要包括 适当的项目模块和依赖

Spring Security 是针对 Spring Framework 6.1.0-M2 构建的,但一般来说应该可以与Spring Framework 5.x 的任何较新版本一起使用。许多用户可能会遇到 Spring Security 的横向依赖会“定义” Spring Framework 6.1.0-M2 的问题,这会导致奇怪的classpath问题。解决这个问题的最简单方法是在 pom.xml<dependencyManagement> 部分使用 spring-framework-bom

pom.xml
<dependencyManagement>
	<dependencies>
		<!-- ... 其他依赖节点 ... -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-framework-bom</artifactId>
			<version>6.1.0-M2</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

前面的例子确保 Spring Security 的所有横向依赖都使用 Spring 6.1.0-M2 模块。

这种方法使用Maven的 “bill of materials” (BOM)概念,仅在Maven 2.0.9以上版本中可用。关于如何解决依赖关系的其他细节,请参阅 Maven的依赖机制介绍文档

Maven 仓库(Repository)

所有GA版本(即以.RELEASE结尾的版本)都会被部署到Maven Central,所以你不需要在pom中声明额外的Maven repository。

如果你使用SNAPSHOT版本,你需要确保你已经定义了 Spring Snapshot repository。

pom.xml
<repositories>
	<!-- ... 可能有其他的Repository元素 ... -->
	<repository>
		<id>spring-snapshot</id>
		<name>Spring Snapshot Repository</name>
		<url>https://repo.spring.io/snapshot</url>
	</repository>
</repositories>

如果你使用里程碑(milestone)或候选版本(release candidate),你需要确保你已经定义了 Spring Milestone Repository,如下例所示。

pom.xml
<repositories>
	<!-- ... 可能有其他的Repository元素 ... -->
	<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 和 Gradle

Spring Boot提供了一个 spring-boot-starter-security starter,聚合了Spring Security相关的依赖。使用starter的最简单和首选方法是通过使用IDE集成( EclipseIntelliJNetBeans)或通过 start.spring.io 使用 Spring Initializr

或者,你也可以手动添加 starter:

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

由于Spring Boot提供了一个Maven BOM来管理依赖版本,所以你不需要指定一个版本。如果你想覆盖Spring Security的版本,你可以通过提供一个Gradle属性来实现。

build.gradle
ext['spring-security.version']='6.2.0-SNAPSHOT'

由于Spring Security只在主要(major)的版本中进行突破性的修改,所以你可以安全地在Spring Boot中使用较新版本的Spring Security。然而,有时你可能也需要更新Spring Framework的版本。你可以通过添加一个Gradle属性来做到这一点。

build.gradle
ext['spring.version']='6.1.0-M2'

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

没有使用 Spring Boot 的 Gradle

当你在没有Spring Boot的情况下使用Spring Security时,首选方式是使用Spring Security的BOM,以确保在整个项目中使用一致的Spring Security版本。你可以通过使用 依赖管理插件来做到这一点。

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

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

一个最小的Spring Security Maven依赖项集通常如下。

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

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

Spring Security 针对 Spring Framework 6.1.0-M2 进行构建,但一般来说,应该可以与 Spring Framework 5.x 的任何较新版本一起使用。许多用户可能会遇到Spring Security的横向依赖“定义” Spring Framework 6.1.0-M2 的问题,这可能导致奇怪的classpath问题。解决这个问题的最简单方法是在 build.gradledependencyManagement 部分使用 spring-framework-bom。你可以通过使用 依赖管理插件 来做到这一点。

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

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

The preceding example ensures that all the transitive dependencies of Spring Security use the Spring 6.1.0-M2 modules.

前面的例子确保Spring Security的所有横向依赖都使用 Spring 6.1.0-M2 模块。

Gradle 仓库(Repository)

所有GA版本(即以.RELEASE结尾的版本)都被部署到Maven Central,所以使用 mavenCentral() 仓库就可以发布GA版本。下面的例子说明了如何做到这一点。

build.gradle
repositories {
	mavenCentral()
}

如果你使用SNAPSHOT版本,你需要确保你已经定义了 Spring Snapshot Repository。

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

如果你使用里程碑(milestone)或候选版本(release candidate),你需要确保你已经定义了 Spring Milestone Repository。

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