acegi 开发笔记

6. 编译acegi-security-1.0.7-src\core的java源代码 [/size]
时,需要修改pom.xml文件内容。修改如下:1)移走parent节点内容,按照无引用的、标准的pom格式构建groupId、version、artifactId、name等内容;2)增加被引用jar的version属性值 (spring.version),增加log4j的version值;3)移走resource节点及其相关的内容。

7. 序列化SecurityContextImpl时的问题:[size=medium]

在编码encode、解码decode时,需要使用传入参数类型为byte[]的方法,才可以正常进行序列化类操作;如果使用String类型传入参数的方法,无法进行正常的序列化类的操作。

8. VSAuthenticationProcessingFilter.doFilter
中会调用super.doFilter(即父类的.AbstractProcessingFilter.doFilter方法),在父类的方法中,使用requiresAuthentication方法去检查当前的URL是否是j_acegi_security_check,如果是,则调用VSAuthenticationProcessingFilter复写的attemptAuthentication方法进行用户验证,验证完后,不再走acegi验证链中的剩余部分,而是直接返回。

9. acegi链式验证的基本逻辑顺序:
1)web.xml设置filter触发点:org.acegisecurity.util.FilterToBeanProxy
2)在businessAcegi.xml中设置acegi 验证链内容,并转到org.acegisecurity.util.FilterChainProxy进行处理
3)在FilterChainProxy中生成VirtualFilterChain,通过它调用验证链中的第一个验证类HttpSessionContextIntegrationFilter。
然后由HttpSessionContextIntegrationFilter及其后的filter中会通过调用传递到其自身验证过滤器中的VirtualFilterChain(chain.doFilter(request, response)),来触发VirtualFilterChain里验证链里的与当前验证过滤器相邻的下一个过滤器。当前的过滤器执行完,如果不调chain.doFilter,则不会验证链的下一个触发,结束当前过滤器操作,并且程序回到过滤器被调用的位置(即VirtualFilterChain的doFilter方法中)。如果继续调用chain.doFilter,则会继续调用virtualFitlerChanin的doFilter方法,该方法有链表下标值的最大值判断,如果链表位置标识值超过链表上限,则调用web.xml中filter chain的其他filter。当最后一个filter完成操作后,程序依次向上返回,直到返回VirtualFilterChain doFilter触发的第一个过滤器HttpSessionContextIntegrationFilter中,最终在VirtualFilterChain doFilter方法中结束整个操作。
4)note:HttpSessionContextIntegrationFilter会使用httpResponse的包装类OnRedirectUpdateSessionResponseWrapper对httpResponse进行重新包装。

50. 用户登陆和权限管理
1) cn.com.*.*.authority.security.intercept.UserUrlByResourceDefinitionSource.lookupAttributes(String url)
负责处理发送到服务器的URL,判断URL是否需要做身份验证。
lookupAttributes方法返回null,表示不需要做验证。若返回AuthenticationHelper.getCadByAuthorities,则需要身份验证。
检查URL时会使用的检查项:1,URL中是否带有authority的路径;2,vseaf init配置文件配置的exposeurl;3,ADMIN_RESOURCE表里的URL数据;4,缓存中的URL内容
如果是受保护的URL,将使用acegi里的authentication里的URL权限数据对其进行验证。

你可能感兴趣的:(Acegi)