快速业务通道

Acegi源码研究(五):七剑下天山 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
uot;的 Authentication对象通过方法 SecurityContextHolder.getContext().setAuthentication存放到 SecurityContext中,以备后用.

Step5/Step6: Acegi将Request(当然还有Response)交给下一个Fillter, 我们例子中是 filterInvocationInterceptor(实际上交给了 exceptionTranslationFilter,这里我们为了讨论的方便,假定交给了 filterInvocationInterceptor ),这个filter再从SecurityContextHolder中取出SecurityContext,再取出里面的已经对上"暗号"的Authentication对象(此对象在本例中实际上是封装了users.properties里这样的" james=tom@1231,ROLE_TECHNICIAN "键值对), 再把这个 Authentication对象交给当前bean中配置的 accessDecisionManager属性以决定 Authentication是否能访问它想访问的资源.经 accessDecisionManager"研究"后发现可以访问,此时Acegi即将Request/Response交给我们系统里配置的相应方法(如Struts里配置的某一method).若"研究"时发现没权限,则以异常的方式交给上面提到的 exceptionTranslationFilter,这个filter再重定向到 loginFormUrl指定的URL上.

到这步骤已走完了, 那怎么没看到"七剑"中的另三剑呢? 它们是 GrantedAuthority , UserDetails , Us erDetailsService . 实际上它们在filterInvocationInterceptor中用到了, 不过当时为了讨论的方便,并没有写出来. 是这样的, 在决定一个 Authentication是否可以访问它想要的资源时, accessDecisionManager会从 Authentication里 调用getAuthorities得到它的 GrantedAuthority[] , 再将它们与通过Us erDetailsService

得到的 UserDetails 对象里方法返回的GrantedAuthority[]一一比较, 若在比较过程中发现有个对应上了, 就表示有权访问,否则即无权. 这里所论述的过程正是上面 accessDecisionManager所做的"研究".

好了,至此, 我们通过跟踪请求的来龙去脉把 applicationContext-acegi-security.xml配置中的Filter走了一遍,更重要的是走filter时,我们与Acegi江湖里的鼎鼎大名的"七剑"有了短暂但美好的接触.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号