没有合适的资源?快使用搜索试试~ 我知道了~
首页spring+acegi+中文手册
spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册spring+acegi+中文手册
资源详情
资源评论
资源推荐
本章内容:
n Acegi 安全系 统介绍
n 使用 Servlet 过滤器保护 Web 应用系统
n 基于数据 库或 LDAP 进行身份认证
n 透明地 对方法调用进行保护
你是否曾注意到在 电视连续剧中大多数人是不锁门的?这是司空见惯的。在情景喜 剧
Seinfeld 中, Krammer 常常到 Jerry 的房 间里自己从冰箱里拿东西吃。在 Friends 中,各 种
各样的剧中人经常不敲门就不假思索地进入别人的房间。甚至有一次在伦敦, Ross 突然 进 入
Chandler 的旅 馆房间,差点儿撞见 Chandler 和 Ross 的妹妹的私情。
在 20 世 纪 50 年代 Leave It to Beaver 热播的时代,并不值得为人们不锁门这一现象大惊小
怪。但在如今这个隐私和安全极受重视的时代,看到电视剧中的角色允许他人大摇大摆地进
入自己的家中或房间中实在让人觉得难以置信。
类似地,在软件系统中,允许任何人可以访问敏感或者私密的信息是不明智的。应用系统必
须通过质询来验证用户身份,据此决定是允许还是拒绝他访问受限制的信息。无论你是通过
用户名 / 密 码来保护一个电子邮件账号,还是基于交易个人身份号码来保护一个佣金账户 , 安
全性都是大多数应用系统的一个重要切面。
我 们有意选择 “ 切面 ” 这个词来描述应用系统的安全性。安全性是超越应用系统功能特性的
一个关注点。应用系统的绝大部分不应该亲自参与到与安全相关的处理中。尽管你能够把与
安全相关的处理直接编码到应用系统中 ( 这种情况并不少见 ) , 但更好的做法还 是将安全有 关
的关注点与应用系统的关注点分开。
如果你想到 这听上去好像安全性是通过 “ 面向切面 ” 技 术实现的,那你猜对了。在本章中 ,
我们将向你介绍 Acegi 安全系 统,并探讨使用 Spring AOP 和 Servlet 过滤器 [1] 来保 护应用
系统的各种手段。
11.1 Acegi 安全系 统介绍
Acegi 是一个能 够为基于 Spring 的 应用系统提供描述性安全保护的安全框架。它提供了一组
可以在 Spring 应用上下文中配置的 Bean ,充分利用了 Spring 对依赖注入和面向切面编程的
支持。
当保 护 Web 应用系统时 , Acegi 使用 Servlet 过滤器来拦截 Servlet 请求 , 以实施身份认证并
强制安全性 。 并且 , 在第 11.4.1 节你将会看到 , Acegi 采取了一 种独特的机制来声明 Servle t
过滤器,使你可以使用 Spring IoC 注入它所依 赖的其他对象。
Acegi 也能 够通过保护方法调用在更底层的级别上强制安全性 。 使用 Spring AOP , Acegi 代理
对 象,将 “ 切面 ” 应用于对象,以确保用户只有在拥有恰当授权时才能调用受保护的方法。
无 论你正在保护一 个 We b 应用程序还是需要方法调用级别的安全性 , Aceg i 都是使用如 图 11. 1
所示的 4 个主要 组件来实施安全性。
图 11.1 Acegi 安全的基本 组件
通 过本章,我们会揭示每一个组件的细节。但在开始考察 Acegi 安全机制的本 质之前,首 先
让我们居高临下地考察一下每个组件扮演的角色 。
11.1.1 安全 拦截器
为了释放锁舌并打开门,你必须先把钥匙插到锁孔中,并恰当地拨动锁的制栓。如果钥匙和
锁不匹配,就无法拨动制栓并释放锁舌。但如果你有正确的钥匙,所有的制栓就会接受这把
钥匙,锁舌就会释放,从而允许你把门打开。
在 Acegi 中,可以 认为安全拦截器像一把锁的锁舌,能够阻止对应用系统中 受保 护资源的访
问 。 为了释放 “ 锁舌 ” 并通 过安全拦截器 , 你必须向系统提供 “ 钥匙 ” ( 通常是一 对用户名和
密码 ) 。 “ 钥匙 ” 会 尝试拨开安全拦截器的 “ 制栓 ” ,从而允 许你访问受保护的资源 。
11.1.2 认证管理器
第一道必 须打开的安全拦截器的制栓是认证管理器 。 认证管理器负责决定你是谁。它是通过
考虑你的 主体(通常是一个用 户名)和你的 凭 证 (通常是一个密 码)做到这点的。
你的主体定 义了你是谁,你的凭证是确认你身份的证据。如果你的凭证足以使认证管理器相
信你的主体可以标识你的身份, Acegi 就能知道它在和 谁打交道 。
11.1.3 访问决策管理器
一旦 Acegi 决定了你是 谁,它就必须决定你是否拥有访问受保护的资源的恰当授权。访问决
策管理器 是 Acegi 锁中第二道必须被打开的制栓。访问决策管理器进行授权,通过考虑你的
身份认证信息和与受保护资源关联的安全属性决定是否让你进入。
例如,安全 规则也许规定只有主管才允许访问某个受保护资源。如果你被授予主管权限,则
第二道也是最后一道制栓 —— 访问决策管理器 —— 会被打 开,并且安全拦截器会给你让路,
让你取得受保护资源的访问权 。
11.1.4 运行身份管理器
当你通 过认证管理器和访问决策管理器,安全拦截器会被开启,门已经可以被打开。但在你
转动门把手进入之前,安全拦截器也许还有一件事要做。
即使你已 经通过身份认证并且已经获得了访问被保护资源的授权,门后也许还有更多的安全
限制在等着你。比如,你也许已被授权访问查看某个 Web 页面,但用于创建该页面的对象也
许和页面本身有不同的安全需求。一个运行身份管理器可以用另一个身份替换你的身份,从
而允许你访问应用系统内部更深处的受保护对象。
运行身份管理器的用 处在大多数应用系统中是有限的。幸运的是,当你使用 Acegi 保 护应用
系统时可以不必使用甚至不必完全理解运行身份管理器。因此,我们认为运行身份管理器是
一个高级课题,在下文中不再深入地探讨它。
现在,你已经看到了 Acegi 安全性的全貌, 让我们回过头来看一下如何配置 Acegi 安全系 统
的每一个部分,首先由认证管理器开始 。
11.2 管理身份 验证
决定是否允 许用户访问受保护资源的第一步是判断用户的身份。在大多数应用系统中,这意
味着用户在一个登录屏上提供用户名和密码。用户名(或者主体)告诉应用系统用户声明自
己是谁 。 为了确证用户的身份 , 用户需要同时提供一个密码 ( 或凭证 ) 。 如果应用系统的安全
机制确认密码是正确的,则系统假设用户的实际身份与他声明的身份相同。
在 Acegi 中,是由 认证管理器负责确定用户身份的。 一个认证管理器由接 口
net.sf.acegisecurity.AuthenticationManager 定 义:
public interface AuthenticationManager {
public Authentication authenticate(Authentication authentication)
throws AuthenticationException;
}
认证管理器 的 authenticate() 方法需要一 个 net.sf.acegisecurity.Authenticatio n 对象 ( 其
中可能只包括用户名和密码)作为参数,它会尝试验证用户身份。如果认证成功,
authenticate() 方法返回一个完整 的 Authenticatio n 对象 , 其中包括用户已被授予的权限 ( 将
由授权管理器使用 ) 。如果认证失败,则它会抛出一个 AuthenticationException 。
正如你所 见到的 , AuthenticationManager 接口非常 简单 , 而且你可以相当容易地实现自己 的
AuthenticationManager 。 但是 Acegi 提供了 ProviderManager , 作 为 AuthenticationManage r
的一个适用于大多数情形的 实现。所以,我们不讨论开发自己的认证管理器,而是看一下如
何使用 ProviderManager 。
11.2.1 配置 ProviderManager
ProviderManager 是 认证管理器的一个实现 , 它将验证身份的责任委托给一个或多个认证提供
者,如图 11.2 所示。
图 11.2 ProviderManager 将身份 验证的职责委托给一个或多个认证提供者
ProviderManager 的思路是使你能 够根据多个身份管理源来认证用户 。 它不是依靠自己实现身
份验证,而是逐一遍历一个认证提供者的集合,直到某一个认证提供者能够成功地验证该用
户的身份(或者已经尝试完了该集合中所有的认证提供者 ) 。
你可以在 Spring 配置文件中按如下方式配置一个 ProviderManager :
<bean id="authenticationManager"
class="net.sf.acegisecurity.providers.ProviderManager">
<property name="providers">
<list>
<ref bean="daoAuthenticationProvider"/>
<ref bean="passwordDaoProvider"/>
</list>
</property>
</bean>
通 过 providers 属性可以 为 ProviderManager 提供一个 认证提供者的列表。通常你只需要一
个认证提供者,但在某些情况下,提供由若干个认证提供者组成的列表是有用的。 在这种情
况下,如果一个认证提供者验证身份失败,可以尝试另一个认证提供者。 一个认证提供者是
由 net.sf.acegisecurity.provider.AuthenticationProvider 接口定 义的 。 Spring 提供了若
干个 AuthenticationProvider 的有用 实现,如下表所列:
表 11.1 Acegi 选择的认证提供者
认证提供者 目 的
net.sf.acegisecurity.adapters.
AuthByAdapterProvider
使用容器的适配器 验证身份。
net.sf.acegisecurity.providers.ca
s.
CasAuthenticationProvider
根据 Yale 中心 认证服务验证身份。
net.sf.acegisecurity.providers.da
o.
DaoAuthenticationProvider
从数据 库中获取用户信息,包括用户名和密
码。
net.sf.acegisecurity.providers.ja
as.
JaasAuthenticationProvider
从 JAAS 登 录配置中获取用户信息。
net.sf.acegisecurity.providers.da
o.
PasswordDaoAuthenticationProvider
从数据 库中获取用户信息,但让底层的数据
源完成实际的身份验证。
net.sf.acegisecurity.providers.rc
p.
RemoteAuthenticationProvider
根据 远程服务验证用户身份。
net.sf.acegisecurity.runas.
RunAsImplAuthenticationProvider
针对身份已经被运行身份管理器替换的用户
进行认证。
net.sf.acegisecurity.providers.
TestingAuthenticationProvider
用于 单元测试。自动认为一 个
TestingAuthenticationToken 是有效的 。 不
应用于生产环境。
你可以 认为一个 AuthenticationProvider 是一个下属的 AuthenticationManager 。事 实上
,
AuthenticationProvider 接口也有一个 authenticate() 方法, 该方法的签名 与
AuthenticationManager 的 authenticate() 方法完全一 样。
在本 节中,我们关注表 11.1 中列出的三个最常用的 认证提供者。首先从使 用
DaoAuthenticationProvider 进行简单的基于数据库验证身份开始 。
11.2.2 根据数据 库验证身份
大多数 应用系统将包括用户名和密码在内的用户信息保存在数据库中。如果这和你的情况相
符,则你会发现 Acegi 提供的以下两个 认证提供者是有用的:
n DaoAuthenticationProvider ;
n PasswordDaoAuthenticationProvider 。
这两个认证提供者都能使你通过将用户的主体和密码与数据库记录进行比较来验证用户身
份 。 两者的不同之处在于真正的身份验证是在哪里进行的 。 DaoAuthenticationProvider 使 用
Dao 来 获取用户名和密码,并使用它们来验证用户身份。 而
PasswordDaoAuthenticationProvider 将身份 验证的责任推给 Dao 自己完成 。 这是一个重要的
区别 , 等到我们在 11.2.3 节中讨论 PasswordDaoAuthenticationProvider 时 , 这个区别会变
剩余45页未读,继续阅读
剑锋不停歇
- 粉丝: 3
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 27页智慧街道信息化建设综合解决方案.pptx
- 计算机二级Ms-Office选择题汇总.doc
- 单链表的插入和删除实验报告 (2).docx
- 单链表的插入和删除实验报告.pdf
- 物联网智能终端项目设备管理方案.pdf
- 如何打造品牌的模式.doc
- 样式控制与页面布局.pdf
- 武汉理工Java实验报告(二).docx
- 2021线上新品消费趋势报告.pdf
- 第3章 Matlab中的矩阵及其运算.docx
- 基于Web的人力资源管理系统的必要性和可行性.doc
- 基于一阶倒立摆的matlab仿真实验.doc
- 速运公司物流管理模式研究教材
- 大数据与管理.pptx
- 单片机课程设计之步进电机.doc
- 大数据与数据挖掘.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0