序言
Spring Security为基于J2EE的企业应用软件提供了一套全面的安全解决方案。正如你在本手册中看到的那样,我们尝试为您提供一套好用,高可配置的安全系统。
安全问题是一个不断变化的目标,更重要的是寻求一种全面的,系统化的解决方案。在安全领域我们建议你采取“分层安全”,这样让每一层确保本身尽可能的安全,并为其他层提供额外的安全保障。每层自身越是“紧密”,你的程序就会越安全。在底层,你需要处理传输安全和系统认证,减少“中间人攻击”(man-in-the-middle attacks)。接下来,我们通常会使用防火墙,结合VPN或IP安全来确保只有获得授权的系统才能尝试连接。在企业环境中,你可能会部署一个DMZ(demilitarized zone,隔离区),将面向公众的服务器与后端数据库,应用服务器隔离开。在以非授权用户运行进程和文件系统安全最大化上,你的操作系统也将扮演一个关键的角。操作系统通常配置了自己的防火墙。然后你要防止针对系统的拒绝服务和暴力攻击。入侵检测系统在检测和应对攻击的时候尤其有用。这些系统可以实时屏蔽恶意TCP/IP地址。在更高层上,你需要配置Java虚拟机,将授予不同java类型权限最小化,然后,你的应用程序要添加针对自身特定问题域的安全配置。Spring Security使后者- 应用程序安全变得更容易。
当然,你需要妥善处理上面提到的每个安全层,以及包含于每个层的管理因素。这些管理因素具体包括:安全公告检测,补丁,人工诊断,审计,变更管理,工程管理系统,数据备份,灾难回复,性能评测,负载检测,集中日志,应急反应程序等等。
Spring Security关注的重点是在企业应用安全层为您提供服务,你将发现业务问题领域存在着各式各样的需求。银行系统跟电子商务应用就有很大的不同。电子商务系统与企业销售自动化工具又有很大不同。这些客户化需求让应用安全显得有趣,富有挑战性而且物有所值。
请阅读Part I, “入门”部分,以它作为开始。它向你介绍了整个框架和以命名空间为基础系统配置方式,让你可以很快启动并运行系统。要是想更多的了解Spring Security是如何工作和一些你可能需要用到的类,你应该阅读Part II, “结构和实现”部分。本指南的其余部分使用了较传统的参考文档方式,请按照自己的需要选择阅读的部分。我们也推荐你阅读尽可能多的在应用安全中可能出现的一般问题。Spring Security也不是万能的,它不可能解决所有问题。重要的一点,应用程序应该从一开始就为安全做好设计。企图改造它也不是一个好主意。特别的,如果你在制作一个web应用,你应该知道许多潜在的脆弱性,比如跨域脚本,伪造请求和会话劫持,这些都是你在一开始就应该考虑到的。OWASP网站(/)维护了一个web应用脆弱性前十名的名单,还有很多有用的参考信息。
我们希望你觉得这是一篇很有用的参考指南,并欢迎您提供反馈意见和建议。
最后,欢迎加入Spring Security 社区。
Part I. 入门
本指南的后面部分提供对框架结构和实现类的深入讨论,了解它们,对你进行复杂的定制是十分重要的。在这部分,我们将介绍Spring Security 3.0,简要介绍该项目的历史,然后看看如何开始在程序中使用框架。特别是,我们将看看命名空间配置提供了一个更加简单的方式,在使用传统的spring bean配置时,你不得不实现所有类。
我们也会看看可用的范例程序。它们值得试着运行,实验,在你阅读后面的章节之前,你可以在对框架有了更多连接之后再回来看这些例子。也请参考项目网站获得构建项目有用的信息,另外链接到网站,视频和教程。
Chapter 1. 介绍
1.1. Spring Security是什么?
Spring Security为基于J2EE企业应用软件提供了全面安全服务。特别是使用领先的J2EE解决方案spring框架开发的企业软件项目。如果你没有使用Spring开发企业软件,我们热情的推荐你仔细研究一下。熟悉Spring尤其是依赖注入原理将帮助你更快的掌握Spring Security。
人们使用Spring Security有很多种原因,不过通常吸引他们的是在J2EE Servlet规范或EJB规范中不到典型企业应用场景的解决方案。提到这些规范,特别要指出的是它们不能在WAR 或EAR级别进行移
植。这样,如果你更换服务器环境,就要在新的目标环境进行大量的工作,对你的应用系统进行重新配置安全。使用Spring Security解决了这些问题,也为你提供了很多有用的,可定制的其他安全特性。
你可能知道,安全包括两个主要操作,“认证”和“验证”(或权限控制)。这就是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 (RMI) and HttpInvoker (一个Spring远程调用协议)
•Automatic "remember-me" authentication (这样你可以设置一段时间,避免在一段时间内还需要重新验证)
•Anonymous authentication (允许任何调用,自动假设一个特定的安全主体)
•Run-as authentication (这在一个会话内使用不同安全身份的时候是非常有用的)
•Java Authentication and Authorization Service (JAAS)
•JEE Container autentication (这样,你可以继续使用容器管理认证,如果想的话)
•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 Plath *
•Atlassian Crowd *
•你自己的认证系统(向下看)
(* 是指由第三方提供,查看我们的整合网页,获得最新详情的链接。)
许多独立软件供应商(ISVs, independent software vendors)采用Spring Security,是因为它拥有丰富灵活的验证模型。这样,无论终端用户需要什么,他们都可以快速集成到系统中,不用花很多功夫,也不用让用户改变运行环境。如果上述的验证机制都没有满足你的需要,Spring Security是一个开放的平台,编写自己的验证机制是十分简单的。Spring Security的许多企业用户需要整合不遵循任何特定安全标准的“遗留”系统,Spring Security在这类系统上也表现的很好。
有时基本的认证是不够的,有时你需要根据在主体和应用交互的方式来应用不同的安全措施。比如,为了保护密码,不被窃听或受到中间人攻击,希望确保请求只通过HTTPS到达。这在防止暴力攻击保
护密码恢复过程特别有帮助,或者简单的,让人难以复制你的系统的关键字内容。为了帮助你实现这些目标,Spring Security完全支持自动“信道安全”,整合jcaptcha一体化进行人类用户检测。
Spring Security不仅提供认证功能,也提供了完备的授权功能。在授权方面主要有三个领域,授权web请求,授权被调用方法,授权访问单个对象的实例。为了帮你了解它们之间的区别,对照考虑授在Servlet规范web模式安全,EJB容器管理安全,和文件系统安全方面的授权方式。Spring Security在所有这些重要领域都提供了完备的能力,我们将在这份参考指南的后面进行探讨。
1.2. 历史
Spring Security开始于2003年年底,“spring的acegi安全系统”。起因是Spring开发者邮件列表中的一个问题,有人提问是否考虑提供一个基于spring的安全实现。在当时Spring的社区相对较小(尤其是和今天的规模比!),其实Spring本身是从2003年初才作为一个sourceforge 的项目出现的。对这个问题的回应是,这的确是一个值得研究的领域,虽然限于时间问题阻碍了对它的继续研究。
有鉴于此,一个简单的安全实现建立起来了,但没有发布。几周之后,spring社区的其他成员询问安全问题,代码就被提供给了他们。随后又有人请求,在2004年一月左右,有20人在使用这些代码。另外一些人加入到这些先行者中来,并建议在sourceforge上建立一个项目,项目在2004年3月正式建立起来。
在早期,项目本身没有自己的认证模块。认证过程都是依赖容器管理安全的,而acegi则注重授权。这在一开始是合适的,但随着越来越多用户要求提供额外的容器支持,基于容器认证的限制就显现出来了。还有一个有关的问题,向容器的classpath中添加新jar,常常让最终用户感到困惑,又容易出现配置错误。
随后acegi加入了认证服务,大约一年后,acegi成为spring的官方子项目。经过了两年半在许多生产软件项目中的活跃使用和数以万计的改善和社区的贡献,1.0.0最终版本发布于2006年5月。
acegi在2007年年底,正式成为spring组合项目,被更名为“Spring Security”。
现在,Spring Security成为了一个强大而又活跃的开源社区。在Spring Security支持论坛上有成千上万的信息。有一个积极的核心开发团队专职开发,一个积极的社区定期共享补丁并支持他们的同伴。
1.3. 发行版本号
了解spring Security发行版本号是非常有用的。它可以帮助你判断升级到新的版本是否需要花费很大的精力。我们使用apache便携式运行项目版本指南,可以在以下网址查看
/versioning.html。为了方便大家,我们引用页面上的一段介绍:
“版本号是一个包含三个整数的组合:主要版本号.次要版本号.补丁。基本思路是主要版本是不兼容的,大规模升级API。次要版本号在源代码和二进制要与老版本保持兼容,补丁则意味着向前向后的完全兼容。”
1.4. 获得Spring Security
你可以通过多种方式获得Spring Security。你可以下载打包好的发行包,从Spring的网站下载页,下载单独的jar(和实例WAR文件)从Maven中央资源库(或者SpringSource Maven 资源库,获得快照和里程碑发布)。可选的,你可以通过源代码创建项目,参考项目网站获得更多细节。
1.4.1. 项目模块
在Spring Security 3.0中,项目已经分割成单独的jar,这更清楚的按照功能进行分割模块和第三方依赖。如果你在使用Maven来构建你的项目,你需要把这些模块添加到你的l中。即使你没有使用Maven,我们也推荐你参考这个l文件,来了解第三方依赖和对应的版本。可选的,一个好办法是参考实例应用中包含的依赖库。
1.4.1.1. Core - spring-security-core.jar
包含了核心认证和权限控制类和接口,运程支持和基本供应API。使用Spring Security所必须的。支持
单独运行的应用,远程客户端,方法(服务层)安全和JDBC用户供应。包含顶级包:
•org.
spring教学视频•org.springframework.security.access
•org.springframework.security.authentication
•org.springframework.security.provisioning
•org.ing
1.4.1.
2. Web - spring-security-web.jar
包含过滤器和对应的web安全架构代码。任何需要依赖servlet API的。你将需要它,如果你需要Spring Security Web认证服务和基于URL的权限控制。主包是
org.springframework.security.web。
1.4.1.3. Config - spring-security-config.jar
包含安全命名控制解析代码(因此我们不能直接把它用在你的应用中)。你需要它,如果使用了Spring Security XML命名控制来进行配置。主包是org.fig。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论