标题：spring security
简介
Spring Security 的前身是 Acegi Security ，是 Spring 项目组中用来提供安全认证服务的框架。　
Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别是使用领先的J2EE解决方案-Spring框架开发的企业软件项目。[1]
（概述图片来源：[2]，内容来源：[3]）
功能
Spring Security对Web安全性的支持大量地依赖于Servlet过滤器。这些过滤器拦截进入请求，并且在应用程序处理该请求之前进行某些安全处理。 Spring Security提供有若干个过滤器，它们能够拦截Servlet请求，并将这些请求转给认证和访问决策管理器处理，从而增强安全性。根据自己的需要，可以使用表7.4中所列的几个过滤器来保护自己的应用程序。
如果使用过Servlet过滤器，那么知道要让它们生效，就必须在Web应用程序的web.xml文件中使用<filter> 和<filter-mapping>元素配置它们。虽然这样做能起作用，但是它并不适用于使用依赖注入进行的配置。
FilterToBeanProxy是一个特殊的Servlet过滤器，它本身做的工作并不多，而是将自己的工作委托给Spring应用程序上下文 中的一个Bean来完成。被委托的Bean几乎和其他的Servlet过滤器一样，实现javax.servlet.Filter接 口，但它是在Spring配置文件而不是web.xml文件中配置的。
实际上，FilterToBeanProxy代理给的那个Bean可以是javax.servlet.Filter的任意实现。这可以是 Spring Security的任何一个过滤器，或者它可以是自己创建的一个过滤器。但是正如本书已经提到的那样，Spring Security要求至少配置四个而且可能一打或者更多的过滤器。[2]
优点
人们使用Spring Security有很多种原因，不过通常吸引他们的是在J2EE Servlet规范或EJB规范中找不到典型企业应用场景的解决方案。
特别要指出的是他们不能再WAR 或 EAR 级别进行移植。
这样，如果更换服务器环境，就要，在新的目标环境进行大量的工作，对应用系统进行重新配置安全。
使用Spring Security 解决了这些问题，也提供很多有用的，完全可以指定的其他安全特性。
可能知道，安全包括两个主要操作。 
第一个被称为“认证”，是为用户建立一个他所声明的主体。主体一般是指用户，设备或可以在系统中执行动作的其他系统。
第二个叫“授权”，指的是一个用户能否在应用中执行某个操作，在到达授权判断之前，身份的主体已经由身份验证过程建立。
这些概念是通用的，不是Spring Security特有的。
在身份验证层面，Spring Security广泛支持各种身份验证模式，这些验证模型绝大多数都由第三方提供，或者正在开发的有关标准机构提供的，例如 Internet Engineering Task Force.
作为补充，Spring Security 也提供了自己的一套验证功能。
Spring Security 目前支持认证一体化如下认证技术：
HTTP BASIC authentication headers (一个基于IEFT RFC 的标准)
HTTP Digest authentication headers (一个基于IEFT RFC 的标准)
HTTP X.509 client certificate exchange (一个基于IEFT RFC 的标准)
LDAP (一个非常常见的跨平台认证需要做法，特别是在大环境)
Form-based authentication (提供简单用户接口的需求)
OpenID authentication
Computer Associates Siteminder
JA-SIG Central Authentication Service (CAS，这是一个流行的开源单点登录系统)
Transparent authentication context propagation for Remote Method Invocation and HttpInvoker (一个Spring远程调用协议)[1]
使用技巧
部署“Tutorial”样例程序
这个样例程序包含在spring发布的zip压缩包文件，名为：spring-security-samples-tutorial-<version>.war。把这个文件重命名为tutorial.war（以便于部署到tomcat时简化访问的URL链接）。把这个文件放到tomcat下的webapp目录下，然后启动tomcat服务。之后就可以用链接访问这个应用程序了。这个样例程序没有做太多的事，不过的确提供了一个很好的模板能很好的把spring安全集成到项目中。绝大多数初学者在这个过程中常遇到的问题出现在简单的配置错误或者路径错误（或者WEB-inf/lib目录下缺失jar包）。必须在一个可以运行的配置环境的基础上开始构建项目。
当运行程序的时候， 确保自己熟悉spring安全的调试日志输出（日志输出默认为打开状态）。虽然框架输出详细的日志，但是很多人却使用得很失败。作为一个未授权的用户点击了一个安全的链接，当登录，退出等等情况下的时候到底发生了什么？当进入到安全过滤器链开始处理的时候，将会看到每一个http请求及如何处理的日志，所以许多在论坛中报道的问题可以按网页浏览器请求的相应日志记录来匹配查找得以解决。
回顾参考向导（Reference Guide）
在命名空间第一章节的第一部分，绝大部分是关于之前学习过的两个步骤，进入前面使用过指南样例(tutorial samle)命令空间元素并且理解它们的主要目的。如果有修改过Petclinic tutorial或者其它的样例程序，参考向导(Reference Guide)的其它部分将带进入更详细的有关于框架实现类，如果有需要的话，可以浏览下它们。
部署通讯录(Contacts)样例（可选）
这个样例将尝试更多srping安全框架高级属性，尤其是ACL模块。文件spring-security-samples-contacts-<version>.war是标准的web MVC应用程序，它可以让以特殊的用户（列举在登录页面的用户）登录并且查看数据库中的”通讯录”，每个登录用户都有若干权限列表，如何登录用户有必需的权限的就可以查看若干的通讯录列表。有某个通讯录管理权限的用户就可以删除这个通讯录，创建或者删除其中实例的权限，因此可以分配（重分配）其它用户读，写，管理通讯录中实例的权限。Spring安全应用在方法级通过在接口ContactManager使用注释（annotations）配置来引入的。
保障应用程序安全
到这个步骤应该对spring的安全如果发觉功效有了很好的领会，剩下的工作应该是如果设计应用程序来实现安全了。推荐使用指南样例（Tutorial Sample）来完成实际的集成工作，即使有复杂的需求。大多数在论坛中报告问题的都是出自配置的问题，因为他们在一开始在并不知道将要如果进行的时候做了太多的改变。[4]
版本发布
2010年12月22日，Spring Security 3.1.0.M2 发布。[5]
2011年02月12日，Spring Security 3.1.0.RC1 发布，与 M2 版本比较，该版本主要改进内容请看 changelog 。[6]
2011年05月01日，Spring Security 3.1.0.RC2 发布。[7]
2011年12月08日，Spring Security 3.1.0 GA版 发布，改进：
添加一个“新”部分的文档，删除汽车配置从名称空间文档，便利构造函数为多个服务器，默认文本输入框OpenID太小，身份验证经理不能被覆盖，过度(错误的)登录DelegatingMethodSecurityMetadataSource，使用安全cookie设置为false并不实际防止cookie被标记为安全的，删除使用过时的方法在名称空间解析代码，类型在模式不利于使用Spring 3.1概要文件，提高名称空间的文档，新特性：添加支持bcrypt密码编码，允许使用一个显式定义一个过滤器链RequestMatcher当使用名称空间，允许使用定制AuthenticationManager在< http >和全球方法安全性。[8]　
2012年07月04日 ，IntelliJ IDEA 12 Leda 支持 Spring Security，
对 Spring Security 的支持得以增强，下面是详细的介绍：Spring Security 3.1 命名空间完全支持所有新的元素，包括 <jee>, <session-management>, 等，同时包括自动完成、导航以及重命名的重构，对已有标签支持也进行了改进。[9]