Acegi源码研究(六): Acegi编码/设计碎得

本文探讨 Acegi 安全框架的关键组件和技术细节,包括 Filter 的工作原理、SecurityContextHolder 的实现方式及其重要性,同时深入分析 Acegi 中的一些核心配置选项。

      前些天通过一个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的书写.

 

 

基于粒子群优化算法的p-Hub选址优化(Matlab代码实现)内容概要:本文介绍了基于粒子群优化算法(PSO)的p-Hub选址优化问题的研究与实现,重点利用Matlab进行算法编程和仿真。p-Hub选址是物流与交通网络中的关键问题,旨在通过确定最优的枢纽节点位置和非枢纽节点的分配方式,最小化网络总成本。文章详细阐述了粒子群算法的基本原理及其在解决组合优化问题中的适应性改进,结合p-Hub中转网络的特点构建数学模型,并通过Matlab代码实现算法流程,包括初始化、适应度计算、粒子更新与收敛判断等环节。同时可能涉及对算法参数设置、收敛性能及不同规模案例的仿真结果分析,以验证方法的有效性和鲁棒性。; 适合人群:具备一定Matlab编程基础和优化算法理论知识的高校研究生、科研人员及从事物流网络规划、交通系统设计等相关领域的工程技术人员。; 使用场景及目标:①解决物流、航空、通信等网络中的枢纽选址与路径优化问题;②学习并掌握粒子群算法在复杂组合优化问题中的建模与实现方法;③为相关科研项目或实际工程应用提供算法支持与代码参考。; 阅读建议:建议读者结合Matlab代码逐段理解算法实现逻辑,重点关注目标函数建模、粒子编码方式及约束处理策略,并尝试调整参数或拓展模型以加深对算法性能的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值