领域,授权 web 请求,授权被调用方法,授权访问单个对象的实例。 为了帮你了解它们之 间的区别,对照考虑授在 Servlet 规范 web 模式安全,EJB 容器管理安全,和文件系统安 全方面的授权方式。 Spring Security 在所有这些重要领域都提供了完备的能力,我们将 在这份参考指南的后面进行探讨。
1.2. 1.2. 1.2. 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. 1.3. 1.3. 1.3. 发行版本号
了解 spring Security 发行版本号是非常有用的。它可以帮助你判断升级到新的版本是否 需要花费很大的精力。 我们使用 apache 便携式运行项目版本指南,可以在以下网址查看 http://apr.apache.org/versioning.html。 为了方便大家,我们引用页面上的一段介绍: “版本号是一个包含三个整数的组合:主要版本号.次要版本号.补丁。 基本思路是主要版本 是不兼容的,大规模升级 API。 次要版本号在源代码和二进制要与老版本保持兼容,补丁 则意味着向前向后的完全兼容。”
1.4. 1.4. 1.4. 1.4. 获得 Spring Spring Spring Spring Security Security Security Security
你可以通过多种方式获得 Spring Security。你可以下载打包好的发行包,从 Spring 的网 站 下载页,下载单独的 jar(和实例 WAR 文件)从 Maven 中央资源库(或者SpringSource Maven 资源库,获得快照和里程碑发布)。 可选的,你可以通过源代码创建项目。参考项 目网站获得更多细节。
1.4.1. 1.4.1. 1.4.1. 1.4.1. 项目模块 在 Spring Security 3.0中,项目已经分割成单独的 jar,这更清楚的按照功能进行分割模 块和第三方依赖。 如果你在使用 Maven 来构建你的项目,你需要把这些模块添加到你的
pom.xml 中。 即使你没有使用 Maven,我们也推荐你参考这个 pom.xml 文件, 来了 解第三方依赖和对应的版本。可选的,一个好办法是参考实例应用中包含的依赖库。
1.4.1.1. 1.4.1.1. 1.4.1.1. 1.4.1.1. Core Core Core Core - spring-security-core.jar spring-security-core.jar 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 org.springframework.security.remoting
1.4.1.2. 1.4.1.2. 1.4.1.2. 1.4.1.2. Web Web Web Web - spring-security-web.jar spring-security-web.jar spring-security-web.jar spring-security-web.jar 包含过滤器和对应的 web 安全架构代码。任何需要依赖 servlet API 的。 你将需要它,如 果 你 需 要 Spring Security Web 认 证 服 务 和 基 于 URL 的 权 限 控 制 。 主 包 是 org.springframework.security.web。
1.4.1.3. 1.4.1.3. 1.4.1.3. 1.4.1.3. Config Config Config Config - spring-security-config.jar spring-security-config.jar spring-security-config.jar spring-security-config.jar
包含安全命名控制解析代码(因此我们不能直接把它用在你的应用中)。你需要它, 如果使 用 了 Spring Security XML 命 名 控 制 来 进 行 配 置 。 主 包 是 org.springframework.security.config。
1.4.1.4. 1.4.1.4. 1.4.1.4. 1.4.1.4. LDAP LDAP LDAP LDAP - spring-security-ldap.jar spring-security-ldap.jar spring-security-ldap.jar spring-security-ldap.jar LDAP 认证和实现代码,如果你需要使用 LDAP 认证或管理 LDAP 用户实体就是必须的。顶 级包是 org.springframework.security.ldap。
1.4.1.5. 1.4.1.5. 1.4.1.5. 1.4.1.5. ACL ACL ACL ACL - spring-security-acl.jar spring-security-acl.jar spring-security-acl.jar spring-security-acl.jar 处理领域对象 ACL 实现。用来提供安全给特定的领域对象实例,在你的应用中。 顶级包是 org.springframework.security.acls。
1.4.1.6. 1.4.1.6. 1.4.1.6. 1.4.1.6. CAS CAS CAS CAS - spring-security-cas-client.jar spring-security-cas-client.jar spring-security-cas-client.jar spring-security-cas-client.jar Spring Security 的 CAs 客户端集成。如果你希望使用 Spring Security web 认证 整合 一个 CAS 单点登录服务器。顶级包是 org.springframework.security.cas。
1.4.1.7. 1.4.1.7. 1.4.1.7. 1.4.1.7. OpenID OpenID OpenID OpenID - spring-security-openid.jar spring-security-openid.jar spring-security-openid.jar spring-security-openid.jar OpenID web 认 证 支 持 。 用 来 认 证 用 户 , 通 过 一 个 外 部 的 OpenID 服 务 。 org.springframework.security.openid。需要 OpenID4Java。
1.4.2. 1.4.2. 1.4.2. 1.4.2. 获得源代码 Spring Security 是一个开源项目,我们大力推荐你从 subversion 获得源代码。 这样你 可以获得所有的示例,你可以很容易的建立目前最新的项目。 获得项目的源代码对调试也 有很大的帮助。 异常堆栈不再是模糊的黑盒问题,你可以直接找到发生问题的那一行,查 找发生了什么额外难题。 源代码也是项目的最终文档,常常是最简单的方法,找出这些事 情是如何工作的。 要像获得项目最新的源代码,使用如下 subversion 命令:
svn checkout http://acegisecurity.svn.sourceforge.net/svnroot/acegisecurity/spring-security/trunk/