当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

Acegi源码研究(六):Acegi编码/筹划碎得[Java编程]

赞助商链接



  本文“Acegi源码研究(六):Acegi编码/筹划碎得[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

前些天通过一个Acegi的Web实例,我们感受了下受保护的好处,也通过一步步的跟踪,感遭到Acegi里"七剑"的存在.本来是想着持续再往下做扩大的,后来一想还是回过头来整理下研究Acegi历程中的碎得吧,毕竟这样的碎得写起轻松些,我也稍稍放松下.   

信马由缰地漫步了下,又想起了当时一开始看Acegi源码时的以下问题:

1, FilterToBeanProxy --> FilterChainProxy, 一个VirtualFilterChain来模拟Web 容器中的FilterChain, 内容类   (自己写代码时也有意识地用protected, private了).

办法的实现与调用 --> 代码块的重用.

FilterChainProxy类里filterInvocationDefinitionSource属性从String到呼应类的自动转换.

2, Filter调用与办法栈的符合,画一个序列图来表示.

3, SecurityContextHolder的多种实现, 为什么要有多种实现,每一种实现又有什么特点?

HttpSession中放没放SecurityContext? 在SecurityContextHolder里也有放. 这种有问题了: 若何让它们俩同步? 删了一个后又怎样?

4, 另处一些常用的配置:

logoutFilter, securityContextHolderAwareRequestFilter, anonymousProcessingFilter

出于什么考虑提出这样的概念?

5, 这一段的作用:

if (request.getAttribute(FILTER_APPLIED) != null) {
// ensure that filter is only applied once per request
chain.doFilter(request, response);

return;
}

要避免在 filterInvocationDefinitionSource中配置了多个httpSessionContextIntegrationFilter, httpSessionContextIntegrationFilter老是在第一个的. 多配置了也没用, 若不加有什么害处不?

6, 为什么以下这种方法来取HttpSession?

try {
httpSession = request.getSession(forceEagerSessionCreation);
}
catch (IllegalStateException ignored) {
}

若getSesssion时传一个False会是什么样的?一个HttpSession普通什么机会成立? 目前越来越不考虑这些问题了.

7, 为什么要把response再包装下? OnRedirectUpdateSessionResponseWrapper

8, 为什么每次都要有 SecurityContextHolder.clearContext();这不挺浪费的吗? 避免Authentication里的用户名/密码/权限在用户操作时有改? 作为一个通用的安全框架应当支持这个功效的, 把权限掌握存放到数据库中太常见了.

9, 以下代码段的的注意点:

if (cloneFromHttpSession) {
Assert.isInstanceOf(Cloneable.class, contextFromSessionObject,
"Context must implement Clonable and provide a Object.clone() method");
try {
Method m = contextFromSessionObject.getClass().getMethod("clone", new Class[]{});
if (!m.isAccessible()) {
m.setAccessible(true);
}
contextFromSessionObject = m.invoke(contextFromSessionObject, new Object[]{});
}
catch (Exception ex) {
ReflectionUtils.handleReflectionException(ex);
}
}

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的书写.


  以上是“Acegi源码研究(六):Acegi编码/筹划碎得[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Acegi(一):酝酿将近一年后的提高
  • Acegi(二): 苍茫后,写还是不写?
  • Acegi(三):Acegi?Who are you?
  • Acegi(四):Acegi初体验及初解剖
  • <b>Acegi源码研究(五):七剑下天山</b>
  • Acegi源码研究(六):Acegi编码/筹划碎得
  • Acegi(七):LogoutFilter配置及几个问题
  • Acegi(八):securityContextHolderAwareRequestFilter
  • Acegi(九) 子类SavedRequestAwareWrapper
  • <b>Acegi(十):securityContextHolderAwareRequestFilter结</b>
  • Acegi(十一):鉴戒Acegi的Exception的非常处理
  • Acegi(十二):anonymousProcessingFilter有什么好玩的?
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .