3. 获得 Spring Security

本节讨论了有关获取 Spring Security 二进制文件所需的所有知识。请参阅第 1.3 节“源代码”以获取源代码。

3.1 版本编号

Spring Security 版本的格式为 MAJOR.MINOR.PATCH,这样

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

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

  • PATCH 级别应完全兼容,向前和向后兼容,可能存在的 exception 是为了修复错误

3.2 Maven 的用法

像大多数开源项目一样,Spring Security 将其依赖项部署为 Maven 工件。以下各节提供有关使用 Maven 时如何使用 Spring Security 的详细信息。

3.2.1 使用 Maven 进行 Spring Boot

Spring Boot 提供了一个 spring-boot-starter-security 启动程序,它将 Spring Security 相关的依赖项聚合在一起。利用入门程序的最简单且首选的方法是通过 IDE 集成(EclipseIntelliJNetBeans)或通过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 来 Management 依赖版本,因此无需指定版本。如果您想覆盖 Spring Security 版本,可以通过提供 Maven 属性来实现:

pom.xml.

<properties>
    <!-- ... -->
    <spring-security.version>5.1.2.RELEASE</spring-security.version>
</dependencies>

由于 Spring Security 仅在主要版本中进行重大更改,因此可以安全地在 Spring Boot 中使用更新版本的 Spring Security。但是,有时可能还需要更新 Spring Framework 的版本。也可以通过添加 Maven 属性轻松完成此操作:

pom.xml.

<properties>
    <!-- ... -->
    <spring.version>5.1.3.RELEASE</spring.version>
</dependencies>

如果您正在使用 LDAP,OpenID 等其他功能,则还需要包括相应的第 4 章,项目模块

3.2.2 没有 Spring Boot 的 Maven

使用不带 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>5.1.2.RELEASE</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,OpenID 等其他功能,则还需要包括相应的第 4 章,项目模块

Spring Security 是基于 Spring Framework 5.1.3.RELEASE 构建的,但通常应与任何较新版本的 Spring Framework 5.x 一起使用。许多用户将遇到的问题是 Spring Security 的可传递依赖项解决了 Spring Framework 5.1.3.RELEASE 的问题。奇怪的 Classpath 问题。解决此问题的最简单方法是使用pom.xml<dependencyManagement>部分中的spring-framework-bom,如下所示:

pom.xml.

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

这将确保 Spring Security 的所有传递依赖项都使用 Spring 5.1.3.RELEASE 模块。

Note

此方法使用 Maven 的“物料清单”(BOM)概念,并且仅在 Maven 2.0.9 中可用。有关如何解决依赖关系的其他详细信息,请参见Maven 的依赖机制简介文档

3.2.3 Maven 存储库

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

如果您使用的是 SNAPSHOT 版本,则需要确保已定义 Spring Snapshot 存储库,如下所示:

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 Milestone 存储库,如下所示:

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>

3.3 Gradle

像大多数开源项目一样,Spring Security 将其依赖项部署为 Maven 工件,从而提供了一流的 Gradle 支持。以下各节提供了有关在使用 Gradle 时如何使用 Spring Security 的详细信息。

3.3.1 带有 Gradle 的 Spring Boot

Spring Boot 提供了一个 spring-boot-starter-security 启动程序,它将 Spring Security 相关的依赖项聚合在一起。利用入门程序的最简单且首选的方法是通过 IDE 集成(EclipseIntelliJNetBeans)或通过https://start.spring.io使用Spring Initializr

另外,可以手动添加启动器:

build.gradle.

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

由于 Spring Boot 提供了一个 Maven BOM 来 Management 依赖版本,因此无需指定版本。如果您想覆盖 Spring Security 版本,可以通过提供 Gradle 属性来实现:

build.gradle.

ext['spring-security.version']='5.1.2.RELEASE'

由于 Spring Security 仅在主要版本中进行重大更改,因此可以安全地在 Spring Boot 中使用更新版本的 Spring Security。但是,有时可能还需要更新 Spring Framework 的版本。也可以通过添加 Gradle 属性轻松完成此操作:

build.gradle.

ext['spring.version']='5.1.3.RELEASE'

如果您正在使用 LDAP,OpenID 等其他功能,则还需要包括相应的第 4 章,项目模块

3.3.2 没有 Spring Boot 的 Gradle

使用不带 Spring Boot 的 Spring Security 时,首选方法是利用 Spring Security 的 BOM,以确保在整个项目中使用一致的 Spring Security 版本。可以使用依赖 Management 插件完成。

build.gradle.

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

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

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

build.gradle.

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

如果您正在使用 LDAP,OpenID 等其他功能,则还需要包括相应的第 4 章,项目模块

Spring Security 是基于 Spring Framework 5.1.3.RELEASE 构建的,但通常应与任何较新版本的 Spring Framework 5.x 一起使用。许多用户将遇到的问题是 Spring Security 的可传递依赖项解决了 Spring Framework 5.1.3.RELEASE 的问题。奇怪的 Classpath 问题。解决此问题的最简单方法是使用pom.xml<dependencyManagement>部分中的spring-framework-bom,如下所示:这可以通过使用依赖 Management 插件完成。

build.gradle.

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

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

这将确保 Spring Security 的所有传递依赖项都使用 Spring 5.1.3.RELEASE 模块。

3.3.3 Gradle 存储库

所有 GA 版本(即以.RELEASE 结尾的版本)均已部署到 Maven Central,因此使用 mavenCentral()存储库足以满足 GA 版本的要求。

build.gradle.

repositories {
    mavenCentral()
}

如果您使用的是 SNAPSHOT 版本,则需要确保已定义 Spring Snapshot 存储库,如下所示:

build.gradle.

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

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

build.gradle.

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