Acegi 各过滤的解析(一)

1: 本实例主要通过http basic认证的方式,演示Sring Acegi一个最简单的应用

 

2: 在由于Acegi本身是有过滤器驱动的,因此需要在web.xml中定义DelegatingFilterProxy过去器。它会到spring应用上下文中去
查找filterChainProxy POJO对象,因此需要使用监听器的方式启动spring应用环境,因为默认是,listener在filter之前工作.
而filterChainProxy又引用四个过滤器。依次完成http请求处理,这是acegi基本功能至少要引用的。他们的顺序是不能随便调动。


四个过滤器分别如下:
3: HttpSessionContextIntegrationFilter,主要负责SecurityContext的同步,如果session存在,并且存放了以前的认证信息,
HttpSessionContextIntegrationFilter会把session中的信息还原到SecurityContext中,同时把SecurityContext对象存放到
ThreadLocal线程中去(默认),因此在整过ServletRequest请求过程中使用SecurityContextHolder.getContext()获取SecurityContext
对象,为了适应不同的环境,提供了三种存储策略

退出HttpSessionContextIntegrationFilter时,会清除当前线程中
SecurityContext的相关信息,并且同步到session中去,
HttpSessionContextIntegrationFilter配置是有两个属性可以配置:
allowSessionCreation,forceEagerSessionCreation。当forceEagerSessionCreation指定为true时,allowSessionCreation也就必须指定为true
4: BasicProcessingFilter,负责完成用户的认证工作,当访问到受保护的资源时,BasicProcessingFilter从http请求头中获取认证信息,实际的认证 工作由认证提供者来完成(实现了AuthenticationProvider接口的类),,可以提供多个认证提供者,由认证管理器进行统一管理(实现了AuthenticationManager接口的类)Acegi提供的认证提供者


只要一个认证提供者完成了用户的认证,ProviderManager就会把认证结构返回给调用者,剩下的认证就不会再去工作了。
认证过程中的认证对象是实现了Authentication接口类的实例。认证对象是更具请求参数构造的,下面是BasicProcessingFilter中的一段代码。

if (authenticationIsRequired(username)) {       UsernamePasswordAuthenticationToken authRequest =              new UsernamePasswordAuthenticationToken(username, password);

 认证通过后,把Authentication对象到SecurityContext对象中去,下次再发送请求时,根据authenticationIsRequired方法判断是否再需要进行认证。
通过以上的分析我们很容易进行扩展,例如用email做用户名登陆。根据BasicProcessingFilter扩展一个新类,并新建一个EmailPasswordAuthenticationToken类。

如果失败,BasicProcessingFilterEntryPoint构造http响应头,浏览器收到响应厚会弹出一个窗口。
要求输入用户名和密码。


5: ExceptionTranslationFilter:如果在认证或授权过程中出现异常,ExceptionTranslationFilter会进行处理。


6: FilterSecurityIntercepto负责完成对用户的授权

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值