Acegi源码研究(六):Acegi编码/设计碎得 - 编程入门网
Acegi源码研究(六):Acegi编码/设计碎得时间:2009-12-13 javaeye rmn190前些天通过一个Acegi的Web实例,我们感受了下受保护的好处,也通过一步步的跟踪,感觉到Acegi里"七剑"的存在.本来是想着继续再往下做扩展的,后来一想还是回过头来整理下研究Acegi过程中的碎得吧,毕竟这样的碎得写起轻松些,我也稍稍放松下. 信马由缰地溜达了下,又想起了当时一开始看Acegi源码时的如下问题: 1, FilterToBeanProxy --> FilterChainProxy, 一个VirtualFilterChain来模仿Web 容器中的FilterChain, 内容类 (自己写代码时也有意识地用protected, private了). 方法的实现与调用 --> 代码块的重用. FilterChainProxy类里filterInvocationDefinitionSource属性从String到相应类的自动转换. 2, Filter调用与方法栈的吻合,画一个序列图来表示. 3, SecurityContextHolder的多种实现, 为什么要有多种实现,每一种实现又有什么特点? HttpSession中放没放SecurityContext? 在SecurityContextHolder里也有放. 这种有问题了: 如何让它们俩同步? 删了一个后又怎样? 4, 另处一些常用的配置:
出于什么考虑提出这样的概念? 5, 这一段的作用:
要防止在 filterInvocationDefinitionSource中配置了多个httpSessionContextIntegrationFilter, httpSessionContextIntegrationFilter总是在第一个的. 多配置了也没用, 若不加有什么害处不? 6, 为什么如下这种方式来取HttpSession?
若getSesssion时传一个False会是什么样的?一个HttpSession一般什么时机创建? 现在越来越不考虑这些问题了. 7, 为什么要把response再包装下? OnRedirectUpdateSessionResponseWrapper 8, 为什么每次都要有 SecurityContextHolder.clearContext();这不挺浪费的吗? 防止Authentication里的用户名/密码/权限在用户操作时有改? 作为一个通用的安全框架应该支持这个功能的, 把权限控制存放到数据库中太常见了. 9, 如下代码段的的注意点:
9.1 为什么要 cloneFromHttpSession? 联想到Hibernate的PersistentContext, 它会自动来做dirty check的, 若不clone一个,直接把一个原来的return给client的话,会影响dirty check的速度. 9.2 自己写例子试试clone接口的实现与深度拷贝. 10, 从方法 readSecurityContextFromSession看框架级代码的书写: 10.1 考虑到多种可能层层设防. 从而确保return一个 non-null,且为实现 SecurityContext接口的HttpSession里以" ACEGI_SECURITY_CONTEXT_KEY "存放的对象, 不要被"狸猫换太子"了. 10.2, log的书写. |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |