Acegi.docx
- 文档编号:1245504
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:13
- 大小:21.42KB
Acegi.docx
《Acegi.docx》由会员分享,可在线阅读,更多相关《Acegi.docx(13页珍藏版)》请在冰点文库上搜索。
Acegi
一、Acegi是什么?
Acegi是一个基于Spring的IOC和AOP技术实现的安全认证框架.作为一个安全认证框架,它包括"认"和"证"2个部分.认:
识别操作者的身份;"证":
证明操作者是否拥有访问和操作某些的资源的权限.在进行认证之前,Acegi通过对方法或者URI请求进行拦截,分析认证信息.所以Acegi实现包括安全拦截、认证管理、访问决策管理三部分.
二、名词及部分解释
Authentication对象:
包含了Credential(证书)和Principal的授权信息.同时还可以包含关于发起认证请求的客户的其他信息,如IP地址;
ContextHolder对象:
使用ThreadLocal储存Authentication对象的地方.
三、基本实现原理
1.安全拦截
在Web应用程序中,使用Filter过滤器拦截请求,通过FilterSecurityInterceptor实施身份认证并强制安全性;另外,Acegi可以使用SpringAOP的拦截机制,将"切面"应用于资源对象,生成Acegi代理对象,通过MethodSecurityInterceptor实现以确保用户只有在拥有恰当授权时才能调用受保护的资源,其中Filter过滤器的安全拦截为下面总结的重点.
由于Acegi是基于Spring的IOC和AOP技术实现的,所以,我们首先需要装载Web应用的Spring上下文,在Web.xml中配置如下,其中securityAcegi.xml用来配置Acegi:
org.springframework.web.context.ContextLoaderListener
其次,继续在web.xml中声明过滤器,对所有的http请求进行拦截. FilterToBeanProxy顾名思义就是将Acegi过滤器Bean的代理,它将所有的http请求一次分派给targetClass这个目标Bean.FilterChainProxy是过滤器链代理Bean. org.acegisecurity.util.FilterToBeanProxy org.acegisecurity.util.FilterChainProxy 在securityAcegi.xml中声明FilterChainProxy的实例,来处理所有的请求,FilterChainProxy是一个过滤器链的代理Bean,所有的请求会在过滤器间依次进行过滤. class="org.acegisecurity.util.FilterChainProxy"> --转化为小写--> CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON --使用ANT类型的正则表达式--> PATTERN_TYPE_APACHE_ANT /**=httpSessionContextIntegrationFilter,authenticationProcessingFilter,rememberMeProcessingFilter,logoutFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor 下面分别介绍过滤器及其实现: HttpSessionContextIntegrationFilter 该Filter负责每次请求从HttpSession的attribute中获取Authentication对象,然后存于一个新的ContextHolder对象中,这样可以让该次请求过程中的任何Filter都可以通过ContextHolder来共享Authentication,而不需要从HttpSession中取,减少传HttpRequest参数的麻烦.在HttpRequest结束后再将ContextHolder中的Authentication对象存回到HttpSession中供下次HttpRequest使用,最后把刚才生成的ContextHolder对象销毁.这样就达到了让Authentication对象跨越多个请求的目的.注意此filter须在调用其他Acegifilter前使用: --从Session中获取Authentication对象--> class="org.acegisecurity.context.HttpSessionContextIntegrationFilter"/> 该Filter负责处理登陆身份验证.当接受到与filterProcessesUrl所定义相同的请求时,它会首先通过AuthenticationManager来验证用户身份.如果验证成功,则重定向到defaultTargetUrl所定义的成功登陆页面.如果验证失败,则再从rememberMeServices中获取用户身份,若再获取失败,则重定向到auhenticationFailureUrl所定义的登陆失败页面 --HTML表单认证处理filter--> class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"> ref="authenticationManager"/> --登陆失败转向的页面--> -- login_error=1--> login_error=1 --登陆成功转向的页面--> --要验证的地址--> --出现异常所对应的地址--> --登陆失败org.acegisecurity.AuthenticationException=/login.jsp? error=fail --已登陆了org.acegisecurity.concurrent.ConcurrentLoginException=/login.jsp? error=too class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices"> -- --key是用来保证cookie的真实性,有效性--> 该Filter负责处理退出登录后所需要的清理工作.它会把session销毁,把ContextHolder清空,把rememberMeService从cookies中清除掉,然后重定向到指定的退出登陆页面. --注销处理filter--> class="org.acegisecurity.ui.logout.LogoutFilter"> --定义用户注销的地址--> --离开后所转向的位置--> -- 该Filter会首先调用AuthenticationManager判断用户是否已登陆认证,如还没认证成功,则重定向到登陆界面.认证成功,则从Authentication中获取用户的权限.然后从objectDefinitionSource属性获取各种URL资源所对应的权限.最后调用AccessDecisionManager来判断用户所拥有的权限与当前受保护的URL资源所对应的权限是否相匹配.如果匹配失败,则返回403错误给用户.匹配成功则用户可以访问受保护的URL资源 --对请求进行拦截,访问前进行权限检查--> class="org.acegisecurity.intercept.web.FilterSecurityInterceptor"> ref="authenticationManager"/> --定义了什么样的资源需要什么样的角色--> CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /hello.htm=ROLE_ANONYMOUS,ROLE_USER /logoff.jsp=ROLE_ANONYMOUS,ROLE_USER /switchuser.jsp=ROLE_SUPERVISOR /j_acegi_switch_user=ROLE_SUPERVISOR,ROLE_ADMIN /admin/**=ROLE_ADMIN SecurityContextHolderAwareRequestFilter 该Filter负责通过DecorateModel(装饰模式),装饰的HttpServletRequest对象.其Wapper是ServletRequest包装类HttpServletRequestWrapper的子类(SavedRequestAwareWrapper或者SecurityContextHolderAwareRequestWrapper),附上获取用户权限信息,request参数,header,Date,headers和cookies的方法. 该Filter负责处理HTTP头的认证信息,如从Spring远程协议(如Hessian和Burlap)或普通的浏览器如IE,Navigator的HTTP头中获取用户信息,将他们转交给通过authenticationManager属性装配的认证管理器.如果认证成功,会将一个Authentication对象放到会话中,否则,如果认证失败,会将控制转交给认证入口点(通过authenticationEntryPoint属性装配) class="org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint"> 该Filter负责在用户登录后在本地机上记录用户cookies信息,免除下次再次登陆.检查AuthenticationManager中是否已存在Authentication对象,如果不存在则会调用RememberMeServices的aotoLogin方法来从cookies中获取Authentication对象 --利用cookie自动登陆--> class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter"> ref="authenticationManager"/> class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices"> -- --key是用来保证cookie的真实性,有效性--> 该Filter负责为当不存在任何授权信息时,自动为Authentication对象添加userAttribute中定义的匿名用户权限 class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter"> value="anonymousUser,ROLE_ANONYMOUS"/> 该过滤器负责处理各种异常,然后重定向到相应的页面中. class="org.acegisecurity.ui.ExceptionTranslationFilter"> class="org.acegisecurity.ui.AccessDeniedHandlerImpl"> 2.认证管理 在Acegi中,通过认证管理器负责确定用户身份,一个认证管理器由authenticationManager接口进行定义. Acegi提供了一个authenticationManager的实现AuthenticationProvider,它负责把 第二个文档 关键字: web框架 对于任何一个完整的应用系统,完善的认证和授权机制是必不可少的.在基于SpringFramework的WEB应用中,我们可以使用Acegi作为安全架构的实现.本文将介绍如何在基于Spring构架的Web应用中使用Acegi,并且详细介绍如何配置和扩展Acegi框架以适应实际需要. 1.概述 Acegi是一个专门为SpringFramework应用提供安全机制的开放源代码项目,全称为AcegiSecuritySystemforSpring,当前版本为 0.8.3.它使用了Spring的方式提供了安全和认证安全服务,包括使用BeanContext,拦截器和面向接口的编程方式.通过精心 配置Acegi安全系统能够轻松地适用于复杂的安全需求.它既能应用于WEB应用也能应用于非WEB应用.在本文的示例程序 里,我将演示如何将Acegi应用于WEB应用程序.通过这个例子详细介绍如何配置Acegi的各个组件,同时介绍如何扩展Acegi 使其能够从数据库中读取配置信息. 2.例子说明 本文的例子是一个联系人管理程序,使用SpringFramework1.2.4和Acegi0.8.3,数据库采用Mysql.程序的目录结构如下: acegi-sample contactadd.jsp//增加联系人页面 contactedit.jsp//编辑联系人页面 contactlist.jsp//联系人列表页面 contactmainterance.jsp//联系人操作页面 index.jsp//主页面 login.jsp//登录页面 logoff.jsp//登出页面 WEB-INF web.xml applicationContext-basic.xml applicationContext-security-acegi.xml log4j.properties src sample//java代码目录 classes lib//依赖包目录 db//建表脚本目录 3.配置文件说明 接下来,我们将进入本文的重要内容,开始对Acegi应用程序所牵涉到的配置文件进行一一说明. 3.1web.xml 首先声明SpringFramework的配置文件列表.为了便于管理,将业务方法相关的配置文件和Acegi安全配置相关的配置文件分 开. <context-param></context-param> <param-name></param-name>contextConfigLocation <param-value></param-value> /WEB-INF/applicationContext-basic.xml /WEB-INF/applicationContext-security-acegi.xml 其次声明Acegi过滤器. <filter>&
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Acegi