
2017/1/14 SpringSecurity参考手册|SpringSecurity中文版
https://springcloud.cc/springsecurityzhcn.html 1/141
Spring Security 参考手册
Ben Alex⋅Luke Taylor⋅Rob Winch⋅Gunnar Hillert
Table of Contents
前言
入门
简介
Spring Security是什么?
历史
发布版本号
Getting Spring Security
Spring Security 4.1新特性
Java 配置提升
Web应用程序安全性提升
授权改进
密码模块的改进
测试的改进
一般的改进
样品和指南 (Start Here)
Java 配置
基础的网站安全java配置
HttpSecurity
Java配置和表单登录
验证请求
处理登出
验证
多个HttpSecurity
方法安全
已配置对象的后续处理
安全命名空间配置
简介
开始使用安全命名空间配置
高级web功能
方法安全
默认的 AccessDecisionManager
验证管理器和命名空间
应用程序示例
Tutorial 示例
Contacts 示例
LDAP 示例
OpenID 示例
CAS 示例
JAAS 示例
Pre-Authentication 示例
Spring Security 社区
问题跟踪
成为参与者
更多信息
架构与实现
技术概述
运行环境
核心组件
验证
在Web应用程序中的身份验证
Spring Security的访问控制(授权)
Localization
核心服务

2017/1/14 SpringSecurity参考手册|SpringSecurity中文版
https://springcloud.cc/springsecurityzhcn.html 2/141
The AuthenticationManager, ProviderManager and AuthenticationProvider
UserDetailsService实现
Password Encoding
Testing
Testing Method Security
Security Test Setup
@WithMockUser
@WithAnonymousUser
@WithUserDetails
@WithSecurityContext
Test Meta Annotations
Spring MVC Test Integration
Setting Up MockMvc and Spring Security
SecurityMockMvcRequestPostProcessors
SecurityMockMvcRequestBuilders
SecurityMockMvcResultMatchers
Web应用程序的安全性
The Security Filter Chain
DelegatingFilterProxy
FilterChainProxy
Filter Ordering
Request Matching and HttpFirewall
与其它过滤器-基于框架使用
高级的命名空间配置
核心安全过滤器
FilterSecurityInterceptor
ExceptionTranslationFilter
SecurityContextPersistenceFilter
UsernamePasswordAuthenticationFilter
Servlet API的集成
Servlet 2.5+ 集成
Servlet 3+ 集成
Servlet 3.1+ 集成
Basic和Digest认证
BasicAuthenticationFilter
DigestAuthenticationFilter
Remember-Me Authentication
Overview
Simple Hash-Based Token Approach
Persistent Token Approach
Remember-Me的接口和实现
Cross Site Request Forgery (CSRF)
CSRF攻击
同步器标记模式
何时使用CSRF保护
Using Spring Security CSRF Protection
CSRF警告
重写默认值
CORS
安全HTTP响应头
默认的安全头
Custom Headers
会话管理
会话管理过滤器
会话的身份验证策略
并发控制
匿名身份验证
概述

2017/1/14 SpringSecurity参考手册|SpringSecurity中文版
https://springcloud.cc/springsecurityzhcn.html 3/141
配置
验证信任解析器
WebSocket Security
WebSocket Configuration
WebSocket Authentication
WebSocket Authorization
Enforcing Same Origin Policy
Working with SockJS
授权
授权体系结构
授权
Pre-Invocation处理
访问决策管理器
调用处理
层次的角色
安全对象的实现
AOP联盟(方法调用)安全拦截器
AspectJ(连接点)安全拦截器
表达式的访问控制
概述
Web Security Expressions
Method Security Expressions
额外的话题
域对象的安全(acl)
概述
关键概念
开始
Pre-Authentication场景
Pre-Authentication框架类
具体实现
LDAP 身份验证
概述
使用LDAP Spring Security
配置LDAP服务器
实现类
活动目录的认证
JSP 标签库
宣布Taglib
授权标签
身份验证标记
The accesscontrollist Tag
csrfInput标签
csrfMetaTags标签
Java Authentication and Authorization Service (JAAS) Provider
概述
Jaas远程准入Provider摘要
默认Jaas身份验证提供
Jaas Provider准入
项目运行
CAS 身份验证
Overview
CAS如何工作
配置客户案件
X.509 Authentication
概述
增加X.509认证您的Web应用程序
在Tomcat中设置SSL
run - as验证替换

2017/1/14 SpringSecurity参考手册|SpringSecurity中文版
https://springcloud.cc/springsecurityzhcn.html 4/141
概述
Configuration
Spring Security Crypto模块
引言
加密器
keygenerators
passwordencoders
并发支持
DelegatingSecurityContextRunnable
DelegatingSecurityContextExecutor
Spring Security Concurrency 并发类
Spring MVC 整合
@EnableWebMvcSecurity
MvcRequestMatcher
@AuthenticationPrincipal
Spring MVC 异步集成
Spring MVC 和 CSRF 整合
Spring Data 整合
Spring 数据 & Spring 安全配置
安全的表达 @Query
Appendix
安全数据库模式
用户模式
持续登录 (记住我) Schema
ACL Schema
安全空间
Web应用安全
WebSocket 安全
认证服务
方法安全性
LDAP命名空间选项
Spring Security依赖关系
spring-security-core
spring-security-remoting
spring-security-web
spring-security-ldap
spring-security-config
spring-security-acl
spring-security-cas
spring-security-openid
spring-security-taglibs
Spring security 是一个强大的和高度可定制的身份验证和访问控制框架。它是确保基于Spring的应用程序的标
准。
前言
Spring Security 为基于javaEE的企业应用程序提供一个全面的解决方案。正如你将从这个参考指南发现的,我们试图为你提供一个有用的
并且高度可配置的安全系统。
安全是一个不断移动的目标,采取一个全面的全系统的方法很重要。在安全领域,我们鼓励你采取"layers of security"(安全层),这样每
一层尽可能的在自己范围内诶保证安全,连续的层提供额外的安全性。安全层更密集你的程序将更加健壮更加安全。在最底层,你需要处理
传输安全和系统识别这些问题,以减少中间人攻击。接下来,你讲通常利用防火墙,或许使用VPN或者IP担保以确保只有授权的系统能够尝
试连接。在企业环境中你可以部署一个DMZ将面向公众的服务器和数据库以及应用服务器分隔开来。你的操作系统也将扮演重要的部分,解
决问题,类似,使用非特权用户运行进程和提高文件系统安全性。操作系统通常会配置自己的防火墙。但愿在某处前进的道路上,你会试图
阻止拒绝服务和暴力攻击。一个入侵检测系统将在监视和相应攻击时非常有用,这种系统能采取保护动作,比如实时阻断违规的TCP/IP地
址。在更高的层,你的java虚拟机希望被配置为尽量减少不同的java类型授予的权限,然后将你的应用程序增加到器自身的制定域特定的安
全配置。Spring Security 使后者 ,应用程序将更加安全更加容易。

2017/1/14 SpringSecurity参考手册|SpringSecurity中文版
https://springcloud.cc/springsecurityzhcn.html 5/141
当然你需要妥善处理上面提到的所有安全层,连同各层的管理因素。这样的管理因素答题包括安全公告监测、补丁、人员审查、审计、变更
控制、工程管理系统、数据备份、灾难恢复、性能基准测试、负载监控、集中式日志记录、事件相应程序等。
Spring Secruity 致力于在企业应用程序安全层对你进行帮助,你会发现这里有如此不同的需求正如业务问题的领域。一个银行应用程序具
有与电子商务应用不同的需求。电子商务应用程序同企业销售自订花工具具有不同的需求。这些定制需求使得应用安全有趣、有挑战性和有
回报。
请阅读入门第二部分, 从“入门”开始。 这一章将为你介绍的框架和基于命名空间的配置系统,你可以配置好应用,来了解Spring
Security 如何工作和一些你可能 需要使用的类 。你需要阅读 架构与实现。本指南的其余部分是更传统的引用样式结构,设计用于按需进
行阅读。我们也建议你尽可能于都完一般的应用安全问题。Spring Secruity 不是万能的,不能解决所有的安全问题。重要的实在应用设计
开始之初就考虑到安全性。后期改造不是一个好的主意。特别是,如果你正在构件一个Web应用程序,你应该知道许多潜在的漏洞,比如跨
站脚本、请求伪造和会话劫持。这些你一开始就应该考虑。这个网站 (http://www.owasp.org/) 维护了一个大网站应用漏洞列表和一些有
用的参考信息。
我希望这个参考手册对你来说比较有用,欢迎你的反馈和建议。 suggestions.
最后欢迎你来到Spring Security 社区。 community.
入门
本指南的稍后张杰会对框架的架构和实现类进行一个深度的讨论,如果你的相对Spring Security进行一个深度定制没这一章节将会包含你
需要了解的内容。在本章我们将会介绍Spring Security 3.0 给项目的历史进行简要的概述,简单的讲讲如何开始使用设个框架。尤其是我
们将看看命名空间配置,他提供与传统Spring Bean你必须连接所有实现类的途径更简单的方式保护你的应用程序。
我们也会看看实例应用。在你阅读后面的章节之前你指的试着运行体验它。当时你对框架连接更多的时候你还可以汇过来回顾一下。
project website (http://spring.io/spring-security) 同时请参阅项目的网站,因为他有创建这个项目的有用的信息,以及文章、视频和教
程。
简介
Spring Security是什么?
Spring Security 提供了基于javaEE的企业应有个你软件全面的安全服务。这里特别强调支持使用SPring框架构件的项目,Spring框架是企
业软件开发javaEE方案的领导者。如果你还没有使用Spring来开发企业应用程序,我们热忱的鼓励你仔细的看一看。熟悉Spring特别是一来
注入原理两帮助你更快更方便的使用Spring Security。
人们使用Spring Secruity的原因有很多,单大部分都发现了javaEE的Servlet规范或EJB规范中的安全功能缺乏典型企业应用场景所需的深
度。提到这些规范,重要的是要认识到他们在WAR或EAR级别无法移植。因此如果你更换服务器环境,这里有典型的大量工作去重新配置你的
应用程序员安全到新的目标环境。使用Spring Security 解决了这些问题,也为你提供许多其他有用的,可定制的安全功能。
正如你可能知道的两个应用程序的两个主要区域是“认证”和“授权”(或者访问控制)。这两个主要区域是Spring Security 的两个目
标。“认证”,是建立一个他声明的主题的过程(一个“主体”一般是指用户,设备或一些可以在你的应用程序中执行动作的其他系
统)。“授权”指确定一个主体是否允许在你的应用程序执行一个动作的过程。为了抵达需要授权的店,主体的身份已经有认证过程建立。
这个概念是通用的而不只在Spring Security中。
在身份验证层,Spring Security 的支持多种认证模式。这些验证绝大多数都是要么由第三方提供,或由相关的标准组织,如互联网工程任
务组开发。另外Spring Security 提供自己的一组认证功能。具体而言,Spring Security 目前支持所有这些技术集成的身份验证:
HTTP BASIC 认证头 (基于 IETF RFC-based 标准)
HTTP Digest 认证头 ( IETF RFC-based 标准)
HTTP X.509 客户端证书交换 ( IETF RFC-based 标准)
LDAP (一个非常常见的方法来跨平台认证需要, 尤其是在大型环境)
Form-based authentication (用于简单的用户界面)
OpenID 认证
Authentication based on pre-established request headers (such as Computer Associates Siteminder) 根据预先建立的请求有进
行验证
JA-SIG Central Authentication Service (CAS,一个开源的SSO系统 )
Transparent authentication context propagation for Remote Method Invocation (RMI) and HttpInvoker (Spring远程协议)
Automatic "remember-me" authentication (你可以勾选一个框以避免预定的时间段再认证)