Acegi.docx

上传人:b****5 文档编号:12702219 上传时间:2023-04-21 格式:DOCX 页数:13 大小:21.42KB
下载 相关 举报
Acegi.docx_第1页
第1页 / 共13页
Acegi.docx_第2页
第2页 / 共13页
Acegi.docx_第3页
第3页 / 共13页
Acegi.docx_第4页
第4页 / 共13页
Acegi.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Acegi.docx

《Acegi.docx》由会员分享,可在线阅读,更多相关《Acegi.docx(13页珍藏版)》请在冰豆网上搜索。

Acegi.docx

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

contextConfigLocation

其次,继续在web.xml中声明过滤器,对所有的http请求进行拦截.

FilterToBeanProxy顾名思义就是将Acegi过滤器Bean的代理,它将所有的http请求一次分派给targetClass这个目标Bean.FilterChainProxy是过滤器链代理Bean.

AcegiFilterChainProxy

org.acegisecurity.util.FilterToBeanProxy

targetClass

org.acegisecurity.util.FilterChainProxy

AcegiFilterChainProxy

/*

在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"/>

--登陆失败转向的页面-->

--/accegi_b/login.jsp?

login_error=1-->

/accegi_b/login.jsp?

login_error=1

--登陆成功转向的页面-->

/index.do

--要验证的地址-->

/j_acegi_security_check

--出现异常所对应的地址-->

--登陆失败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">

ContactsRealm

该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>&

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1