首页 > java > Acegi架构的工作流程

Acegi架构的工作流程

2007年7月13日 发表评论 阅读评论
第一部分:authentication

1 acegi通过AuthenticationProcessingFilter拦截login请求获取PrincipalCredential信息(通俗一点就是用户名和密码

2 、验证用户名密码,由这个Filter调用认证管理器AuthenticatiomManager进行验证。

AuthenticatiomManager 本身并不具备验证的功能,它相当与是一个验证控制器,由它来管理验证的过程及方式。AuthenticatiomManager是通过调用 provider来进行验证的,一个manager中可以具有多个provider,但只要有一个provider验证通过,manager就认为验证成功。

这部分要明白三点:一,provider是可以配置进去的,因为acegi是基于spring的;二是 AuthenticatiomManager是可以被重写的,你可以将manager改成你自己希望的控制器;三,好好利用event,这是标准的 observer模式。

3 provider进行验证。

provider 是真正的验证模块,并且决定了验证的模式。provider目前acegi提供了

几种验证方式,如:
        DaoAuthenticationProvider 从数据库中读取用户信息验证身份
        AnonymousAuthenticationProvider 匿名用户身份认证
        RememberMeAuthenticationProvider 已存cookie中的用户信息身份认证
        AuthByAdapterProvider 使用容器的适配器验证身份
        CasAuthenticationProvider 根据Yale中心认证服务验证身份, 用于实现单点登陆
        JaasAuthenticationProvider JASS登陆配置中获取用户信息验证身份
        RemoteAuthenticationProvider 根据远程服务验证用户身份
        RunAsImplAuthenticationProvider 对身份已被管理器替换的用户进行验证
        X509AuthenticationProvider X509认证中获取用户信息验证身份
        TestingAuthenticationProvider 单元测试时使用。
provider验证通过后将Authentication对象返回。

4 AuthenticationProcessingFilter将对象保存到ContextHolder中。Authentication部分结束。

第二部分:authorization

1用户提交请求,拦截器FilterSecurityInterceptor拦截请求,拦截器是一个Filter.

鉴权,拦截器调用AccessDecisionManager进行鉴权。

AccessDecisionManager是通过投票的方式来决定是否有权限访问资源。所谓投票就要包括投票的参与者和投票的策略。

投票的参与者decisionVoters,这是AccessDecisionManager的一个属性。decisionVoter能从某一个角度决定用户是否能访问资源,例如RoleVoter来判断用户的角色是否有权限访问资源,MaxuserVoter来决定某个资源的访问用户数是否已经达到了最大值等。

投票策略投票的策略是通过不同的AccessDecisionManager来实现的。

Acegi中投票策略分为三种
1
org.acegisecurity.vote.AffirmativeBased
只要有一票投赞成,即可通过
2
org.acegisecurity.vote.ConsensusBased需要大多数的投票,方可通过
3
org.acegisecurity.vote.UnanimousBased
没有否决投票,方可通过.
最后再检查弃权票的处理方式.
<property name="allowIfAllAbstainDecisions"
              value="false" />
这里配置为所有投票皆弃权,不允许访问。
 
但在大多数情况下acegi提供的AccessDecisionManager不能满足我们的要求,这就需要我们去实现 AccessDecisionManager接口,去定制适合自己项目的策略。

3 、投票。投票对象必须实现AccessDecisionVoter接口。投票对象关注的是某一方面的决定权,如果投票通过则Vote方法来完成的。vote 方法必须返回一个int型的数据代表投票结果,它们是AccessDecisionVoter的三个静态成员属性:ACCESS_ABSTAIN, ACCESS_DENIEDACCESS_GRANTED,它们分别是弃权,否决和赞成。

分类: java 标签: 2,303 次阅读
原文链接:http://www.wenhq.com/article/view_87.html
欢迎转载,请注明出处:亲亲宝宝
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.