没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论














Spring Security Reference 译译 : Spring安全参 考安 全 参 考
本帮助文档是 觉得烦死 整理--QQ:654638585
声明:
中文文档都是由软件翻译,翻译内容未检查校对,文档内容仅供参考。
您可以任意转发,但请至保留作者&出处(http://bolg.fondme.cn),请尊重作者劳动成果,谢谢!
Authors 译译 :作 者作 者
Ben Alex , Luke Taylor , Rob Winch , Gunnar Hillert , Joe Grandja , Jay Bryant
5.1.0.M1
版权所有©2004-2017
本文件副本可供您自行使用并分发给其他人,前提是您不收取任何此类副本的费用,并进一步规定每份副本均包含此版权声明,无论是以印刷版还是电子版分发。
译译 :
Spring Security是一个强大且高度可定制的身份验证和访问控制框架。 这是保护基于Spring的应用程序的事实标准。
Part I. Preface 译译 :第 一 部 分 前 言第 一 部 分 前 言
Spring Security为基于Java EE的企业软件应用程序提供了全面的安全解决方案。 正如您在参考指南中发现的那样,我们试图为您提供一个有用且高度可配置的安全系统。
安全是一个不断移动的目标,并且追求全面的系统范围方法非常重要。 在安全圈中,我们鼓励您采用“安全层”,以便每层都尽可能保证安全,连续层提供额外的安全性。
每层的安全性越“紧密”,应用程序就越健壮和安全。 在底层,您需要处理诸如运输安全和系统识别等问题,以缓解中间人攻击。 接下来,您通常会使用防火墙,可能使用
VPN或IP安全性来确保只有经过授权的系统才能尝试连接。 在企业环境中,您可以部署一个DMZ,将面向公众的服务器与后端数据库和应用程序服务器分开。 您的操作系
统也将扮演重要角色,解决诸如以无特权用户身份运行进程等问题并最大限度提高文件系统安全性。 操作系统通常也会配置自己的防火墙。 希望在这个过程中的某个地方
你会试图阻止对系统的拒绝服务和暴力攻击。 入侵检测系统对于监视和响应攻击也特别有用,因为这些系统能够采取保护措施,例如实时阻止侵入TCP / IP地址。 转移到
更高层,您的Java虚拟机将有望配置为最大限度地减少授予不同Java类型的权限,然后您的应用程序将添加自己的问题特定于域的安全配置。 Spring Security使后面的这个
领域 - 应用程序的安全性更容易。
当然,您需要正确处理上面提到的所有安全层,以及包含每个层的管理因素。 这些管理因素的非详尽清单将包括安全公告监控,修补,人员审查,审计,变更控制,工程
管理系统,数据备份,灾难恢复,性能基准测试,负载监控,集中式日志记录,事件响应程序等。
由于Spring Security专注于帮助企业应用程序安全层,因此您会发现有多少不同的需求与业务问题域相同。 银行应用程序对电子商务应用程序有不同的需求。 电子商务应
用程序对企业销售人员自动化工具有不同的需求。 这些自定义要求使应用程序安全性变得有趣,富有挑战性和有益。
请首先阅读Chapter 1, Getting Started的全部内容。 这将向您介绍框架和基于命名空间的配置系统,您可以使用该系统快速启动和运行。 为了更好地理解Spring Security的
工作原理以及您可能需要使用的一些类,请阅读Part II, “Architecture and Implementation” 。 本指南的其余部分采用更传统的参考样式,旨在根据需要进行阅读。 我们还建
议您尽可能多地阅读应用程序安全问题。 Spring Security不是解决所有安全问题的万能药。 从一开始,应用程序的设计就要考虑到安全性,这一点很重要。 试图改造它并
不是一个好主意。 特别是,如果您正在构建Web应用程序,则应该意识到许多潜在的漏洞,例如跨站脚本,请求伪造和会话劫持,您应该从一开始就考虑这些漏洞。
OWASP网站( http://www.owasp.org/ )保留了Web应用程序漏洞的十大列表以及大量有用的参考信息。
我们希望您发现本参考指南很有用,我们欢迎您的反馈和 suggestions 。
最后,欢迎来到Spring Security community 。
1. Getting Started 译译 : 1.入门入门
本指南的后面部分提供了关于框架体系结构和实现类的深入讨论,您需要了解是否需要进行任何严格的自定义。 在这一部分,我们将介绍Spring Security 4.0,简要介绍一
下该项目的历史,并对如何开始使用该框架稍微考虑一下。 特别是,我们将着眼于命名空间配置,与传统的Spring bean方法相比,它提供了一种更简单的保护应用程序的
方法,您必须单独连接所有实现类。
我们还会看看可用的示例应用程序。 在你阅读后面的章节之前,值得尝试运行它们并尝试一些 - 你可以在对框架的理解增加的时候重新考虑它们。 请同时查阅http://spring
。 io / spring-security [项目网站],因为它有关于构建项目的有用信息,以及指向文章,视频和教程的链接。
2. Introduction 译译 : 2.介绍介绍
2.1 What is Spring Security? 译译 : 2.1什 么 是什 么 是 Spring Security??
Spring Security为基于Java EE的企业软件应用程序提供全面的安全服务。 特别强调支持使用Spring Framework构建的项目,Spring Framework是用于企业软件开发的领先
Java EE解决方案。 如果您没有使用Spring开发企业应用程序,我们热烈鼓励您仔细研究它。 对Spring的一些熟悉 - 特别是依赖注入原则 - 将帮助您更轻松地熟悉Spring
Security。
人们使用Spring Security有很多原因,但是大多数人在找到Java EE的Servlet规范或EJB规范的安全特性后,都缺乏典型企业应用场景所需的深度。 在提到这些标准的同
时,认识到它们在WAR或EAR级别不可移植是很重要的。 因此,如果切换服务器环境,在新的目标环境中重新配置应用程序的安全性通常需要很多工作。 使用Spring
Security克服了这些问题,并且还为您带来了许多其他有用的,可自定义的安全功能。
正如您可能知道应用程序安全性的两个主要方面是“身份验证”和“授权”(或“访问控制”)。 这是Spring Security的两大主要领域。 “身份验证”是建立委托人的过程是他们自称
的人(“委托人”通常是指用户,设备或其他可以在您的应用程序中执行操作的系统)。 “授权”是指决定是否允许委托人在您的申请内执行某项操作的过程。 为了达到需要授
权决定的地步,委托人的身份已经由认证过程确定。 这些概念很常见,并不完全针对Spring Security。

在认证级别,Spring Security支持多种认证模式。 这些认证模式大多由第三方提供,或者由相关标准组织(如互联网工程任务组)开发。 另外,Spring Security还提供了自
己的一套认证功能。 具体而言,Spring Security目前支持与所有这些技术的认证集成:
HTTP BASIC authentication headers (an IETF RFC-based standard)
HTTP Digest authentication headers (an IETF RFC-based standard)
HTTP X.509 client certificate exchange (an IETF RFC-based standard)
LDAP (a very common approach to cross-platform authentication needs, especially in large environments)
Form-based authentication (for simple user interface needs)
OpenID authentication
Authentication based on pre-established request headers (such as Computer Associates Siteminder)
Jasig Central Authentication Service (otherwise known as CAS, which is a popular open source single sign-on system)
Transparent authentication context propagation for Remote Method Invocation (RMI) and HttpInvoker (a Spring remoting protocol)
Automatic "remember-me" authentication (so you can tick a box to avoid re-authentication for a predetermined period of time)
Anonymous authentication (allowing every unauthenticated call to automatically assume a particular security identity)
Run-as authentication (which is useful if one call should proceed with a different security identity)
Java Authentication and Authorization Service (JAAS)
Java EE container authentication (so you can still use Container Managed Authentication if desired)
Kerberos
Java Open Source Single Sign-On (JOSSO) *
OpenNMS Network Management Platform *
AppFuse *
AndroMDA *
Mule ESB *
Direct Web Request (DWR) *
Grails *
Tapestry *
JTrac *
Jasypt *
Roller *
Elastic Path *
Atlassian Crowd *
Your own authentication systems (see below)
(*表示由第三方提供)
许多独立软件供应商(ISV)都采用Spring Security,因为这种灵活的身份验证模型的选择非常重要。 这样做可以让他们快速地将他们的解决方案与他们最终客户需要的任
何内容集成起来,而无需进行大量工程或要求客户改变其环境。 如果上述认证机制都不符合您的需求,Spring Security是一个开放平台,编写您自己的认证机制非常简单。
Spring Security的许多公司用户都需要与不遵循任何特定安全标准的“传统”系统集成,而Spring Security很高兴能够与这样的系统“很好地发挥”。
无论身份验证机制如何,Spring Security都提供了一套深层次的授权功能。 有三个主要的感兴趣领域:授权Web请求,授权是否可以调用方法并授权访问单个域对象实例。
为帮助您理解这些差异,请分别考虑Servlet规范Web模式安全性,EJB容器托管安全性和文件系统安全性中的授权功能。 Spring Security在所有这些重要领域提供了深入的
功能,我们将在本参考指南的后面部分进行探讨。
2.2 History 译译 : 2.2历 史历 史
Spring Security在2003年底开始称为“春季Acegi安全系统”。 Spring Developers的邮件列表上提出了一个问题,询问是否对基于Spring的安全实现给予了任何考虑。 当时
Spring社区的规模相对较小(特别是与今天的规模相比),而Spring本身的确只是从2003年初开始作为SourceForge项目而存在。对这个问题的回应是它是一个有价值的领
域,尽管缺乏的时间目前阻止了它的探索。
考虑到这一点,构建了一个简单的安全实现,而不是发布。 几个星期后,Spring社区的另一位成员询问了安全问题,并在当时向他们提供了这些代码。 接下来还有其他几
个要求,到2004年1月,大约有20个人在使用这些代码。 这些先锋用户与其他人一起提出了一个建议SourceForge项目是有序的,该项目于2004年3月正式成立。
在那些早期,该项目没有任何自己的认证模块。 集装箱安全管理被用于认证过程,而Acegi Security则专注于授权。 这在一开始就很合适,但随着越来越多的用户请求额外
的容器支持,容器特定身份验证领域接口的基本限制变得清晰起来。 还有一个相关的问题,即向容器的类路径添加新的JAR,这是最终用户混淆和错误配置的常见原因。
随后引入了Acegi安全特定的认证服务。 大约一年后,Acegi Security成为Spring Framework的正式子项目。 2006年5月发布了1.0版的最终版本 - 经过两年半的积极使用众
多生产软件项目以及数百项改进和社区贡献。
Acegi Security于2007年底成为春季投资组合项目,并更名为“春季安全”。
今天,Spring Security拥有一个强大且活跃的开源社区。 在支持论坛上有数千条关于Spring Security的消息。 有一个积极的核心开发人员从事代码本身的工作,同时也是一
个活跃的社区,他们也经常分享补丁和支持他们的同行。
2.3 Release Numbering 译译 : 2.3版 本编 号版 本 编 号
了解Spring Security发行版的工作原理非常有用,因为它可以帮助您确定迁移到项目未来版本所涉及的工作(或缺乏)。 每个版本使用一个标准的整数三元组:
MAJOR.MINOR.PATCH。 目的是MAJOR版本不兼容,API的大规模升级。 MINOR版本应该在很大程度上保留与旧版次版本的源代码和二进制兼容性,认为可能会有一些
设计更改和不兼容的更新。 PATCH级别应该完全兼容,前后颠倒,可能的例外是修改错误和缺陷的更改。
您受到更改影响的程度取决于您的代码的集成程度。 如果您正在进行大量定制,则与使用简单名称空间配置相比,您可能会受到更多的影响。
在推出新版本之前,您应该始终彻底测试您的应用程序。
2.4 Getting Spring Security 译译 : 2.4获 得获 得 Spring Security
你可以通过几种方式获得Spring Security。 您可以从主要的http://spring下载打包的发行版 。 io / spring-security [Spring Security]页面中,从Maven Central存储库(或Spring
Maven存储库中下载快照和里程碑版本)下载各个jar,或者,您可以自己从源代码构建项目。
2.4.1 Usage with Maven 译译 : 2.4.1使 用使 用 Maven
最小的Spring Security Maven依赖关系集通常如下所示:
pom.xml中。中。

<dependencies>
<!-- ... other dependency elements ... -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.1.0.M1</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.1.0.M1</version>
</dependency>
</dependencies>
如果您正在使用LDAP,OpenID等附加功能,则还需要包含相应的 Section 2.4.3, “Project Modules” 。
Maven Repositories 译译 :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>http://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>http://repo.spring.io/milestone</url>
</repository>
</repositories>
Spring Framework Bom 译译 : Spring框架框架
Spring Security针对Spring Framework 5.0.6.RELEASE构建,但应该与4.0.x一起使用。 许多用户会遇到的问题是,Spring Security的传递依赖性解决了Spring Framework
5.0.6.RELEASE,它可能会导致奇怪的类路径问题。
解决这个问题的一个(单调乏味的)方法是将所有Spring框架模块包含在你的pom的<dependencyManagement>部分。 另一种方法是为包括 spring-framework-bom 你的
内 <dependencyManagement> 您的部分 pom.xml ,如下所示:
pom.xml中。中。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>5.0.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
这将确保Spring Security的所有传递依赖使用Spring 5.0.6.RELEASE模块。
这种方法使用了Maven的“材料清单”(BOM)概念,并且仅在Maven 2.0.9+中可用。 有关依赖关系如何解决的更多详细信息,请参阅Maven’s Introduction to
the Dependency Mechanism documentation 。
2.4.2 Gradle 译译 : 2.4.2 Gradle
最小的Spring Security Gradle依赖关系集通常如下所示:
的的build.gradle。。
dependencies {
compile 'org.springframework.security:spring-security-web:5.1.0.M1'
compile 'org.springframework.security:spring-security-config:5.1.0.M1'
}
如果您正在使用LDAP,OpenID等附加功能,则还需要包含相应的 Section 2.4.3, “Project Modules” 。
Gradle Repositories 译译 : 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' }
}
Using Spring 4.0.x and Gradle 译译 :使 用使 用 Spring 4.0.x和和 Gradle
默认情况下,Gradle将在解析传递版本时使用最新版本。 这意味着在Spring Framework 5.0.6.RELEASE中运行Spring Security 5.1.0.M1时通常不需要额外的工作。 但是,
有时可能会出现问题,因此最好使用Gradle’s ResolutionStrategy来缓解此问题 ,如下所示:
的的build.gradle。。
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'org.springframework') {
details.useVersion '5.0.6.RELEASE'
}
}
}
这将确保Spring Security的所有传递依赖使用Spring 5.0.6.RELEASE模块。
这个例子使用了Gradle 1.9,但可能需要修改才能在Gradle的未来版本中工作,因为这是Gradle中的一项孵化功能。
2.4.3 Project Modules 译译 : 2.4.3项 目 模 块项 目 模 块
在Spring Security 3.0中,代码库被细分为独立的jar,这些jar更清楚地区分了不同的功能区域和第三方依赖关系。 如果您使用Maven构建项目,那么这些是您将添加
到 pom.xml 的模块。 即使您没有使用Maven,我们也建议您参考 pom.xml 文件以了解第三方依赖关系和版本。 或者,一个好主意是检查示例应用程序中包含的库。
Core - spring-security-core.jar 译译 :核 心核心 - spring-security-core.jar
包含核心认证和访问控制类和接口,远程处理支持和基本配置API。 由使用Spring Security的任何应用程序所要求。 支持独立应用程序,远程客户端,方法(服务层)安全
性和JDBC用户配置。 包含顶级包:
org.springframework.security.core
org.springframework.security.access
org.springframework.security.authentication
org.springframework.security.provisioning
Remoting - spring-security-remoting.jar 译译 : Remoting - spring-security-remoting.jar
提供与Spring Remoting的集成。 除非你正在编写一个使用Spring Remoting的远程客户端,否则你不需要这个。 主包是 org.springframework.security.remoting 。
Web - spring-security-web.jar 译译 : Web - spring-security-web.jar
包含过滤器和相关的网络安全基础架构代码。 任何具有servlet API依赖性的东西。 如果您需要Spring Security Web认证服务和基于URL的访问控制,您将需要它。 主包
是 org.springframework.security.web 。
Config - spring-security-config.jar 译译 :配置配置 - spring-security-config.jar
包含安全名称空间解析代码和Java配置代码。 如果您使用Spring Security XML名称空间进行配置或Spring Security的Java配置支持,则需要它。 主包
是 org.springframework.security.config 。 这些类别都不能直接用于应用程序。
LDAP - spring-security-ldap.jar 译译 : LDAP - spring-security-ldap.jar
LDAP认证和供应代码。 如果您需要使用LDAP身份验证或管理LDAP用户条目,则为必填项。 顶层包是 org.springframework.security.ldap 。
OAuth 2.0 Core - spring-security-oauth2-core.jar 译译 : OAuth 2.0核 心核 心 - spring-security-oauth2-core.jar
spring-security-oauth2-core.jar 包含为OAuth 2.0
授权框架
和OpenID Connect Core 1.0提供支持的核心类和接口。 使用OAuth 2.0或OpenID Connect Core 1.0的
应用程序(例如客户端,资源服务器和授权服务器)需要此功能。 顶级套餐是 org.springframework.security.oauth2.core 。
OAuth 2.0 Client - spring-security-oauth2-client.jar 译译 : OAuth 2.0客 户 端客户 端 - spring-security-oauth2-client.jar
spring-security-oauth2-client.jar 是Spring Security对OAuth 2.0
授权框架
和OpenID Connect Core 1.0的客户端支持。 应用程序需要使用OAuth 2.0登录登录和/或
OAuth客户端支持。 顶层包是 org.springframework.security.oauth2.client 。
OAuth 2.0 JOSE - spring-security-oauth2-jose.jar 译译 : OAuth 2.0 JOSE - spring-security-oauth2-jose.jar

spring-security-oauth2-jose.jar 包含Spring Security对JOSE (Javascript对象签名和加密)框架的支持。 JOSE框架旨在提供一种安全地在各方之间转让请求的方
法。 它由一系列规格构建而成:
JSON Web Token (JWT)
JSON Web Signature (JWS)
JSON Web Encryption (JWE)
JSON Web Key (JWK)
它包含顶级软件包:
org.springframework.security.oauth2.jwt
org.springframework.security.oauth2.jose
ACL - spring-security-acl.jar 译译 : ACL - spring-security-acl.jar
专门的域对象ACL实现。 用于将安全性应用于应用程序内的特定域对象实例。 顶级包是 org.springframework.security.acls 。
CAS - spring-security-cas.jar 译译 : CAS - spring-security-cas.jar
Spring Security的CAS客户端集成。 如果您想使用CAS单点登录服务器的Spring Security Web认证。 顶层包是 org.springframework.security.cas 。
OpenID - spring-security-openid.jar 译译 : OpenID - spring-security-openid.jar
OpenID Web认证支持。 用于对外部OpenID服务器进行身份验证。 org.springframework.security.openid 。 需要OpenID4Java。
Test - spring-security-test.jar 译译 :测 试测 试 - spring-security-test.jar
支持使用Spring Security进行测试。
2.4.4 Checking out the Source 译译 : 2.4.4检 出 信 号 源检 出 信 号 源
由于Spring Security是一个开源项目,我们强烈建议您使用git检查源代码。 这将使您可以完全访问所有示例应用程序,并且可以轻松构建项目的最新版本。 拥有项目的源
代码对于调试也有很大的帮助。 异常堆栈跟踪不再是晦涩难解的黑盒问题,但是您可以直接找到导致问题并找出问题的线路。 源代码是项目的最终文档,通常是查找实际
内容的最简单方式。
要获得项目的源代码,请使用以下git命令:
git clone https://github.com/spring-projects/spring-security.git
这将使您可以访问本地计算机上的整个项目历史记录(包括所有版本和分支机构)。
3. What’s New in Spring Security 5.1 译译 : 3.什么 是什么是 Spring Security 5.1的 新 功 能的 新 功 能
Spring Security 5.1提供了许多新功能。 以下是该版本的亮点。
3.1 New Features 译译 : 3.1新 功 能新 功 能
Chapter 11, Testing Method Security
Support for customizing when the SecurityContext is setup in the test For example,
@WithMockUser(setupBefore = TestExecutionEvent.TEST_EXECUTION) will setup a user after JUnit’s @Before and before the test executes.
@WithUserDetails now works with ReactiveUserDetailsService
Section 10.4, “Jackson Support” - added support for BadCredentialsException
Section 39.3, “@AuthenticationPrincipal”
Supports resolving beans in WebFlux (was already supported in Spring MVC)
Supports resolving errorOnInvalidType in WebFlux (was already supported in Spring MVC)
4. Samples and Guides (Start Here) 译译 : 4.样品 和 指 南 ( 从 这 里 开 始 )样 品 和 指 南 ( 从 这 里 开 始 )
如果您想要开始使用Spring Security,最好的地方就是我们的示例应用程序。
表表4.1。。 示例应用程序示例应用程序
Source 描述描述 Guide
Hello Spring Security 演示如何将Spring Security与现有的使用基于Java的配置的应用程序集成。 Hello Spring Security Guide
Hello Spring Security Boot 演示如何将Spring Security与现有的Spring Boot应用程序集成。 Hello Spring Security Boot Guide
Hello Spring Security XML 演示如何将Spring Security与使用基于XML的配置的现有应用程序集成。 Hello Spring Security XML Guide
Hello Spring MVC Security 演示如何将Spring Security与现有的Spring MVC应用程序集成。 Hello Spring MVC Security Guide
Custom Login Form 演示如何创建自定义登录表单。 Custom Login Form Guide
OAuth 2.0 Login 演示如何将OAuth 2.0登录与OAuth 2.0或OpenID Connect 1.0 Provider集成。 OAuth 2.0 Login Guide
5. Java Configuration 译译 : 5. Java配 置配置
在Spring 3.1中为Spring Framework添加了对Java Configuration的一般支持。 自Spring Security 3.2以来,已经有了Spring Security Java Configuration支持,使用户无需使
用任何XML即可轻松配置Spring Security。
剩余132页未读,继续阅读
觉得烦死
- 粉丝: 193
- 资源: 30

上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制

- 1
- 2
前往页