CSDN博客

img huxin1

Spring Security

发表于2008/9/28 9:52:00  1039人阅读

Spring Security 使用指南

原作者 : Ben Alex, Luke Taylor

译者 : Kingoal Lee (http://kingoal.javaeye.com )

  1. 现在开始

本章将介绍 Spring Security 2.0,简单地介绍起历史,并且告诉如何使用该框架。并且特意地查看了名词空间配置,因为比起过去传统的 Spring bean的方式来说可以说是一种更加简单的方法来确保应用程序的安全。在下一章节中将更深地讨论框架的体系结构以及实现类,并且告诉如何来作一些自定义化的操作。

同时我们将查看已经存在的例子程序。运行实践这些例子对加深对 Spring Security应用程序框架的理解会非常有好处的。

简介

什么是 Spring Security?

Spring Security为基于 J2EE的企业级软件应用程序提供全面的安全服务。这要特别强调的是支持使用 Spring 框架 的项目, Spring框架是主流的基于 J2EE的企业级软件开发解决方案。如果你没有使用 Spring来开发企业应用程序,那么我们很真诚地邀请你看看 Spring框架。如果熟悉 Spring,特别是倚赖注入原理,会非常有利于你学习 Spring Security.

人们使用 Spring Security有着很多理由,但是主要是因为在 J2EE Servlet EJB标准里面缺乏典型企业应用程序场景中所需要的安全方面的特性。同时在刚才提到的标准,它们在 WAR或者 EAR层面上是不可移植的。因此,如果你更改服务器环境,那么你将在目标服务器环境中在安全方面进行重新配置。如果使用 Spring Security那将克服这些问题,并且给你带来很多其他的有用并且完全个性化的安全特性。

你一定知道安全包括两部分的操作,第一部分就是认证,其就是确保某人是谁,证实真伪。另一部分是授权,是决定起是否有权限去进行某一操作 。在进行授权之前,必须要先经过认证。这些都是一些普通的概念,并不是针对 Spring Security专用的概念。

在认证层面上, Spring Security广泛支持不同类型的认证模型。绝大多数的认证模型要么是由第三方提供,要么是由相关的标准组织如 IETF等开发。同时, Spring Security也提供了其自己的认证特性。具体地来说, Spring Security当前支持集成下面技术的认证:

  • HTTP BASIC authentication headers (an IEFT RFC-based standard) HTTP BASIC认证头

  • HTTP Digest authentication headers (an IEFT RFC-based standard) HTTP Digest认证头

  • HTTP X.509 client certificate exchange (an IEFT RFC-based standard)HTTP X.509客户认证交换

  • LDAP (a very common approach to cross-platform authentication needs, especially in large environments) LDAP 是满足垮平台认证的通用方法,特别适合大型环境

  • Form-based authentication (for simple user interface needs) 基于窗口的认证, 满足简单用户界面的要求

  • OpenID authentication OpenID 认证

  • Computer Associates Siteminder CA Siteminder

  • JA-SIG Central Authentication Service (otherwise known as CAS, which is a popular open source single sign on system) JA SIG集中认证服务,同时也叫做 CAS,其是一个非常受欢迎的开源的单点登录系统

  • Transparent authentication context propagation for Remote Method Invocation (RMI) and HttpInvoker (a Spring remoting protocol) RMI HttpInvoker的透明认证上下文传播

  • Automatic "remember-me" authentication (so you can tick a box to avoid re-authentication for a predetermined period of time) 自动“记住我”认证

  • Anonymous authentication (allowing every call to automatically assume a particular security identity)匿名认证

  • Run-as authentication (which is useful if one call should proceed with a different security identity) Run-as认证

  • Java Authentication and Authorization Service (JAAS) Java认证与授权服务 , JAAS

  • Container integration with JBoss, Jetty, Resin and Tomcat (so you can still use Container Manager Authentication if desired)

  • Java Open Source Single Sign On (JOSSO) * Java开源单点登录

  • OpenNMS Network Management Platform * OpenNMS网络管理平台

  • AppFuse *

  • AndroMDA *

  • Mule ESB *

  • Direct Web Request (DWR) *

  • Grails *

  • Tapestry *

  • JTrac *

  • Jasypt *

  • Roller *

  • Elastic Plath *

  • Atlassian Crowd *

  • Your own authentication systems (see below) 自己的认证系统

很多的独立软件提供商 (ISVs)采用 Spring Security主要是因为其非常灵活的认证模型机制。这样做可以使得他们能够很快地让他们的解决方案同他们的顾客所需要的认证模型整合起来,根本不需要很多的工程或者需求方面进行修改。如果上面列出的认证机制不能够满足你的需要,由于 Spring Security是一个开发的平台,你也很简单地开发出你自己的认证机制。很多的企业使用 Spring Security来整合其并不遵守特定的安全标准的遗留系统, Spring Security能够很好地处理这样的系统。

有些时候,仅仅处理认证还远远不够。因此,需要另外一个不同的安全特性。举例来说,你也许需要在传输 requests方面使用 HTTPS,这样可以保证密码在传输过程中不会被中间人攻击并窃听。或者你要保证该请求是来自具体的人的请求,而不是机器人或者其他的自动化进程。这对于对抗暴力攻击来保护密码恢复流程。为了达到上面的目标, Spring Security结合 JCaptcha完全支持自动化的信道安全 (channel security)

不管认证是如何进行的, Spring Security提供了丰富的授权机制。在授权方面,主要有如下三个方面的授权: web 请求授权,方法调用授权,领域对象实例访问授权 为了帮助你理解这些授权的不同之处,可以参考 Servlet标准的 web模式安全 (web pattern security)EJB容器管理的安全以及文件系统安全。 Spring Security在这些重要的安全领域提供服务的支持,我们将在本指南的后面慢慢讲述。

历史

Spring Security 是在 2003 年底开始的一个项目,其开始叫做 "The Acegi Security System for Spring 。那时候在 Spring 的开发者邮件列表里面问十分考虑提供一个基于 Spring 的安全实现。那时候 Spring 社区是相对来说非常小(特别是相对现在的规模),事实上在 2003 年早些时候, Spring 本身还只是 SourceForge 上的一个开源项目。这个问题的回答是安全实现是一个值得考虑的领域,但是因为缺乏时间,所以不打算进一步实现。

在这样的一个指导下,一个简单的安全系统实现已经生成但是没有发布。几个星期之后, Spring社区的另外一个会员询问起安全,这时候代码才提供给他们。经过后面的其他的一些请求之后,大概到了 2004年一月份,大概 20个人在使用那部分代码。然后在 SourceForge项目新建了该项目,并且这些先驱使用者联合起来进行开发,这样就在 2004年的三月份就成立了。

在早期,该项目本没有自己的认证模块。容器管理安全依赖于认证进程,而 Acegi Security主要是专注于授权。这在刚刚开始是非常适合的,但是随着越来越多的用户请求其他的容器支持,这种特定容器认证接口就存在很多局限性。同时这还有另外一个问题,就是将新的 JAR放到容器的 classpath,这是最终用户混乱和误配的常用根源。

随后添加了 Acegi Security特定的认证服务。大概一年之后, Acegi Security变成了 Spring框架的官方子项目。在 2006 5月份发布了最终的 1.0.0版本。经过 2年半的时间,其在无数的产品软件项目中使用,并且添加了好几百个改进和社区贡献。

2007年底 Acegi Security变成官方的 Spring拳头项目 (Portfolio Project), 并且更改为 Spring Security.

现在 Spring Security有着很强和很活跃的开源社区。在支持论坛上有着成千上万的 Spring Security消息。并且有一个活跃的开发团队正在维护开发核心代码,同时有一个活跃的社区在提供补丁以及其他的支持。

版本号码

理解 Spring Security 的发布版本数字是如何工作的是很有用处的,这样会帮助你迁移你的项目到将来的发布版本上去。正式地说,我们是使用 Apache Portable Runtime Project 的版本向导,可以在 http://apr.apache.org/versioning.html 上查看该向导。为了你的方便,我们将引用其介绍:

版本主要是由 3 部分组成: MAJOR, MINOR, PATCH MAJOR 版本标识是不兼容的,大规模的 API 升级。 MINOR 版本是有保留地在源码以及二进制上同旧的 minor 版本是兼容的,而 PATCH 层面是完全的兼容,包括前向和反向。

获取源码

因为 Spring Security 是开源的项目,因此我们鼓励你通过 Subversion 来下载源码。这样你可以完全访问所有的例子程序,并且能够很容易地编译最新的版本的项目。同时有着一个项目的源码对调试来说可是一个很大的帮助。异常堆栈跟踪不再是黑盒子了,你将直接到出现问题的那一行,并且知道是怎么回事了。源码就是项目的最好的文档,也是最简单地发掘究竟是如何工作的地方。

要得到该项目的 trunk源码,可以使用下面的 subversion命令来得到:

    svn checkout http://acegisecurity.svn.sourceforge.net/svnroot/acegisecurity/spring-security/trunk/
也可以通过如下的连接来得到特定版本的源代码: http://acegisecurity.svn.sourceforge.net/svnroot/acegisecurity/spring-security/tags/

0 0

相关博文

我的热门文章

img
取 消
img