Acegi工作流程 (zz from fengw's blog)
来源:互联网 发布:淘宝淘营销在哪里 编辑:程序博客网 时间:2024/05/15 06:12
Acegi工作流程
任何一个安全系统都包括authentication和authorization两部分,Acegi相同。
第一部分:authentication
1 acegi通过AuthenticationProcessingFilter拦截login请求获取Principal和Credential信息(通俗一点就是用户名和密码 ;-));
2 验证用户名密码,由这个Filter调用认证管理器AuthenticatiomManager进行验证。
AuthenticatiomManager本身并不具备验证的功能,它相当与是一个验证控制器,由它来管理验证的过程及方式。AuthenticatiomManager是通过调用provider来进行验证的,一个manager中可以具有多个provider,但只要有一个provider验证通过,manager就认为验证成功。
这部分要明白三点:一,provider是可以配置进去的,因为acegi是基于spring的;二是AuthenticatiomManager是可以被重写的,你可以将manager改成你自己希望的控制器;三,好好利用event,这是标准的observer模式。acegi中的设计模式研究将在以后的贴子中讨论。
3 provider进行验证。
provider是真正的验证模块,并且决定了验证的模式。provider目前acegi提供了dao、jaas,cas,x509,ldap等几种验证方式,这些验证方式的具体内容可以查阅acegi的文档。provider验证通过后将Authentication对象返回。
4 AuthenticationProcessingFilter将对象保存到ContextHolder中。Authentication部分结束。
第二部分:authorization
1 用户提交请求,拦截器FilterSecurityInterceptor拦截请求,拦截器是一个Filter.
2 鉴权,拦截器调用AccessDecisionManager进行鉴权。
AccessDecisionManager是通过投票的方式来决定是否有权限访问资源。所谓投票就要包括投票的参与者和投票的策略。
投票的参与者decisionVoters,这是AccessDecisionManager的一个属性。decisionVoter能从某一个角度决定用户是否能访问资源,例如RoleVoter来判断用户的角色是否有权限访问资源,MaxuserVoter来决定某个资源的访问用户数是否已经达到了最大值等。
投票策略。投票的策略是通过不同的AccessDecisionManager来实现的,例如acegi提供的AffirmativeBased对象,这个对象的策略就是只要有一个投票通过就全体通过。UnanimousBased对象的策略是必须全体投票通过才能通过。但在大多数情况下acegi提供的AccessDecisionManager不能满足我们的要求,这就需要我们去实现AccessDecisionManager接口,去定制适合自己项目的策略。
3 投票。投票对象必须实现AccessDecisionVoter接口。投票对象关注的是某一方面的决定权,如果投票通过则Vote方法来完成的。vote方法必须返回一个int型的数据代表投票结果,它们是AccessDecisionVoter的三个静态成员属性:ACCESS_ABSTAIN,,ACCESS_DENIED和ACCESS_GRANTED,它们分别是弃权,否决和赞成。
- Acegi工作流程 (zz from fengw's blog)
- acegi流程分析之一《Acegi 中的HttpSessionEvent 监听机制 窥视Acegi的 工作流程》 (zz)
- Belief propagation (zz from Dahua's blog)
- Acegi工作流程(转贴)
- Spring AOP之ThrowsAdvice (zz from guchengting's Blog)
- acegi流程分析之一《Acegi 中的HttpSessionEvent 监听机制 窥视Acegi的 工作流程》
- acegi流程分析之一《Acegi 中的HttpSessionEvent 监听机制 窥视Acegi的 工作流程》
- DirectDraw编程基础(zz From GameRes Blog)
- acegi sercurity 简介 (zz)
- forwarded from chaijing's blog yeqishun
- NSMutableArray,NSArray (From DFdou's Blog)
- 使用 MQ JMS 管理工具(From margin's blog)
- [VS]Tiger系列Tiger.FinderSimulate (from Nicky's Blog)
- mysql的安装【转】from Voidclass's blog
- Debugging Drizzle with GDB -- refer from Padraig’s Blog
- API的掌握程度--from Willem's Blog
- Spring— Acegi工作机制
- JAVA代码编写的30条建议 (zz from chinaewolf Blog )
- asp中 FSO复制文件
- 【顶】感悟人生的十句话
- 用IIS建立虚拟主机,实现在一台主机上建立多个虚拟主机的方法
- vs2003与vs2005编译区别
- 求助~~图象编辑
- Acegi工作流程 (zz from fengw's blog)
- asp截取中英文字符
- c#截取中英文字符
- Web 软件的一些资料的收集整理.
- 更改数据库中表的所属用户的两个方法
- MalformedInputException 处理
- 让英文字符串超出表格宽度自动换行
- DataGrid各种删除方法
- VSS与VS.NET IDE