lrkgithub / Spring-Security-Reference-CN

8 stars 4 forks source link

a #1

Open lrkgithub opened 5 years ago

lrkgithub commented 5 years ago

Spring Security 参考手册

作者

Ben Alex , Luke Taylor , Rob Winch , Gunnar Hillert , Joe Grandja , Jay Bryant

5.2.0.BUILD-SNAPSHOT

版权所有©2004-2017

本文件的副本可供您自己使用和分发给他人,前提是您不对此类副本收取任何费用,并且每份副本均包含本版权声明,无论是以印刷版还是电子版分发。

Spring Security 是一个提供认证,授权和保护常用攻击的框架。Spring Security是一个事实上的基于Spring框架的安全层应用,对命令式和反应式应用都有一流的支持。

章节Ⅰ 前言

这一部分将会讨论 Spring Security 的 物流。

1. Spring Security 社区

欢迎来到 Spring Security 社区!这章节将会讨论如何利用我们庞大社区的价值。

1.1 获得帮助

如果你需要有关于 Spring Security 的帮助,我们这里将提供帮助。下面是获取帮助的一些最好的方式

1.2 成为参与者

我们欢迎你参与到 Spring Security 项目中来。为 Spring Security 贡献的方式有很多种,包括 在 StackOverflow 网站上回答问题,编写新的代码,提升已有代码,完善文档,提供更多例子和教程,或者简单的提出建议。

 1.3 源码

Spring Security 的源码可以在 https://github.com/spring-project/spring-security 上找到。

1.4 Apache 2 License

Spring Security 是一个开源软件,遵循 Apache 2.0 license

1.5 社交媒体

你可以在 Twitter 关注 @SpringSecuritySpring Security Team 及时了解最新的信息。你可以关注 @SpringCentral 以获取 Spring 全部框架的信息。

lrkgithub commented 5 years ago

1.5 社交媒体

你可以在 Twitter 关注 @SpringSecuritySpring Security Team 及时了解最新的信息。你可以关注 @SpringCentral 以获取 Spring 全部框架的信息。

2. Spring Security 5.1 中的新东西

Spring Security 5.1 提供了许多新的特性。以下是这次发布的亮点。

2.1 Servlet

2.2 WebFlux

2.3 集成

3. 获取Spring Security

这一节讨论你需要知道的关于获取 Spring Security 二进制文件(编译好的版本)的全部知识。请参考 1.3 节 “源码”,了解如何获取源码。

3.1 发布版本

lrkgithub commented 5 years ago

3. 获取Spring Security

这一节讨论你需要知道的关于获取 Spring Security 二进制文件(编译好的版本)的全部知识。请参考 1.3 节 “源码”,了解如何获取源码。

3.1 发布版本

Spring Security 版本是以 MAJOR、MINOR、PATCH, 例如:

3.2 使用 Maven

像大多数开源的项目,Spring Security 将它的依赖作为 Maven 的项目(artifact)来部署。接下来的章节提供了如何使用 Maven 来配置 Spring Security 的细节。

3.2.1 使用 Maven 部署 Spring Boot

Spring Boot 提供了聚集了 Spring Security 相关依赖的 spring-boot-starter-security 启动器。最简单和建议的方式是在使用 IDE 中集成的或者通过 http://start.spring.io 来使用 Spring Initializer。

当然,也可以手动的添加启动器。

pom.xml

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

因为 Spring Boot 提供了 Maven Boom 来管理依赖版本,所以没有必要加上版本号。如果你希望重写 Spring Security 的版本号,你可以使用一个 Maven 的参数来完成:

pom.xml

<properties>
    <!-- ... -->
    <spring-security.version>5.2.0.BUILD-SNAPSHOT</spring-security.version>
</dependencies>

因为 Spring Security 只在 major 版本中提供突破性进展,所以使用一个最新版本的带 Spring Security 的 Spring Boot 是比较安全的。当然,有时升级 Spring Framework 版本也是必要的。这也可以简单地通过添加一个 Maven 参数来完成:

pom.xml

<properties>
    <!-- ... -->
    <spring.version>5.2.0.M2</spring.version>
</dependencies>

如果你想添加额外的功能,例如 LDAP,OpenID之类的。你需要适当的引入 4节 “项目模块” 的内容。

3.2.2 不使用 Spring Boot 的 Maven 部署

如果部署 Spring Security 却不部署 Spring Boot,推荐的方式是利用 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.2.0.BUILD-SNAPSHOT</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.2.0.M2 版本来构建的,但是通常可以与任意更新版本的 Spring Framework 5.x 一起工作。许多使用者困扰的问题是, Spring Security 的传递依赖是 Spring Framework 5.2.0.M2版本,这可能会导致奇怪的类路径(classpath)问题。最简单的解决方式是在你的 pom.xml 中,加入 spring-framework-bom<dependencyManagement> 部分,如下所示:

pom.xml

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

这样可以确保 Spring Security 所有的传递依赖使用了 Spring 5.2.0.M2 模块。

3.2.3 Maven 源

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>

如果你选用了 milestone 或者 发布的候选版本,你需要确保你有 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 Security 相关依赖的 spring-boot-starter-security 启动器。最简单和建议的方式是在使用 IDE 中集成的或者通过 http://start.spring.io 来使用 Spring Initializer。

当然,也可以手动增加依赖:

build.gradle

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

因为 Spring Boot 提供了一个 Maven BOM 来管理版本,这里就没有必要再精确到版本号。如果你希望重写 Spring Security 的版本,你也可以通过一个 Gradle 参数来这样做:

build.gradle

ext['spring-security.version']='5.2.0.BUILD-SNAPSHOT'

因为 Spring Security 只在 major 版本中提供突破性修改,所以使用最新的带 Spring Security 的 Spring Boot 版本是更安全的。当然,有时升级 Spring Framework 版本也是必要的。这也可以简单地通过添加一个 Gradle 参数来完成:

build.gradle

ext['spring.version']='5.2.0.M2'

如果你想添加额外的功能,例如 LDAP,OpenID之类的。你需要适当的引入 4节 “项目模块” 的内容。

3.3.2 不使用 Spring Boot 的 Gradle 部署

如果部署 Spring Security 却不部署 Spring Boot,推荐的方式是利用 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:5.2.0.BUILD-SNAPSHOT'
    }
}

一个最小的 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.2.0.M2 版本来构建的,但是通常可以与任意更新版本的 Spring Framework 5.x 一起工作。许多使用者困扰的问题是, Spring Security 的传递依赖是 Spring Framework 5.2.0.M2版本,这可能会导致奇怪的类路径(classpath)问题。最简单的解决方式是在你的 pom.xml 中,加入 spring-framework-bom<dependencyManagement> 部分,如下所示:(这可以使用 Dependency Management Plugin 来完成)

build.gradle.

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

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

这样可以确保 Spring Security 所有的传递依赖使用了 Spring 5.2.0.M2 模块。

3.3.3 Gradle 源

所有 GA 版本(以 .RELEASE 结尾的版本号)都部署在 Maven 中心中,所以使用 mavenCentral() 源来获取 GA 版本就足够了。

build.gradle.

repositories {
    mavenCentral()
}

如果你想使用一个 SNAPSHOT 版本,你需要确保你将 Spring Snapshot 源像如下所示定义正确

build.gradle.

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

如果你想使用 milestone 或者发布的候选版本,你需要确保你将 Spring milestone 源像如下定义正确

build.gradle.

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

4 项目模块

在 Spring Security 3.0 中,代码库已经被分为几个独立的 jar 包,这样可以更清晰的区分功能和第三方 jar 包依赖。如果你是用 Maven 来构建你的项目,那么这里有几个模块需要你加入到你的 pom.xml 中。即使你不使用 Maven ,我们仍建议你的参考这个 pom.xml 来了解第三方依赖以及版本。另外,检查示例程序包含的库是一个好主意。

4.1 Core-spring-security-core.jar

包含核心认证和访问控制的类和接口,远程支持和基础的配置 API 。任何使用 Spring Security 的程序都需要。支持独立应用,远程客户,方法(服务层)安全以及 JDBC 用户配置。包含如下的顶级包:

4.2 Remoting - spring-security-remoting.jar