`

Acegi(十二): anonymousProcessingFilter有什么好玩的?

阅读更多

    在这篇博客中, 我们接着看另一个Filter, anonymousProcessingFilter.

    1, 为什么要配置这个? 它能给我们带来什么好处?

    为了解决这个问题, 看了下Acegi的文档 , 但说实在的, 由于文档中用是"convenient"和"nice"这样的词来描述这个filter的好处, 我现在还感觉不到. 这里把我现在给想到的理由总结一下.

  • 为了理论上的完美. 用了这个fitler,就可以对系统中所有 的 链接加权限管理了, 像login, logout和home这样的"非常规访问",也可以加一个默认的匿名访问Authentication. 像这样的"非常规访问"是可以在acegi的配置文件中写死的, 当然写死有写死的坏处. 由这个坏处,我们看下一个理由.   
  • 为 了某个链接的动态设定. 可能会有这样的情况: 一个链接的访问权限刚开始时是有专门的访问权限的, 但由于业务逻辑的变更, 这个链接的权限改为匿名的了,或者说原来的匿名访问要改为具有一定权限访问了. 这时, 为了在不重启服务器情况下设定权限, 就预先配置一个anonymousProcessingFilter, 让它来处理那些默认的情况.
  • 别的我现在猜不出来了, 希望大家能补上.

    2, 怎么配置?
    虽说不是很理解, 但还是要配置的. 那怎么配置呢? 我们先看这个filter所涉及到的三个类: AnonymousProcessingFilter, AnonymousAuthenticationToken,AnonymousAuthenticationProvider. 第一个类没什么说的, 它就是这个filter的实现类, 没有它办不成事. 第二个类实际上是一个Authentication, acegi通过它来加一个默认的匿名Authentication. 第三个类实现了AuthenticationProvider接口, 有了一个匿名的Authentication, 相应地得给一个Provider, 以便在filterInvocationInterceptor检查权限时,被"卡"住. 呵呵, 看到这, 我觉得挺好笑的了: 本身是一个虚头八脑的东西, 为了"掩盖"它, 让在真实世界里行的通, 还得再给弄两个一样虚头八脑的东东陪着.
    有了一种大致的了解后, 我们看配置:
    2.1 配置anonymousProcessingFilter bean.

   
<bean id="anonymousProcessingFilter" class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter">
        <property name="key" value="anonymous"/>
        <property name="userAttribute" value="anonymous,ROLE_ANONYMOUS"/>
</bean>
 
  •   这两个Property, 都是在生成AnonymousAuthenticationToken时用到.    userAttribute中的anonymous对应着Authentication(AnonymousAuthenticationToken也是 一种Authentication,虽说有些虚)的principal, ROLE_ANONYMOUS对应着Authentication中的GrantedAuthority[],  key的anonymous生成AnonymousAuthenticationToken中的keyHash(通过String类的hashCode方 法获得).
  • <property name="key" value="anonymous"/>与下面配置的anonymousAuthenticationProvider中的相应行对应.

    2.2  配置anonymousAuthenticationProvider

<bean id="anonymousAuthenticationProvider" class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider">
        <property name="key" value="anonymous"/>
</bean>
 
  • 配 置好后, 把这个anonymousAuthenticationProvider配置到ProviderManager类下providers, 这样filterInvocationInterceptor碰到前面配置的匿名Authentication时, 才能在AccessDecisionVoter"投票"时, 由AnonymousAuthentication的自己人anonymousAuthenticationProvider"保护"着"逃过 "check.
  • 一个猜想: 这里的key跟上面anonymousProcessingFilter的key得一致, 不然在"投票"时, 没这个"暗号""自己人"也互相不认识了.想验证这个猜想, 看了下文档,发现这样的话: "The key is shared between the filter and authentication provider, so that tokens created by the former are accepted by the latter".自己的猜想不错!

   
  有了上面的配置分析, 运行机理稍看下源码就可以明白了, 这里也就不用再另写了.

-----------------------------------------
看文档时发现这么段话, 觉得很有必要记下来,虽说现在还没有切身体验:Rounding out the anonymous authentication discussion is the AuthenticationTrustResolver interface, with its corresponding AuthenticationTrustResolverImpl implementation. This interface provides an isAnonymous(Authentication) method, which allows interested classes to take into account this special type of authentication status. The ExceptionTranslationFilter uses this interface in processing AccessDeniedExceptions. If an AccessDeniedException is thrown, and the authentication is of an anonymous type, instead of throwing a 403 (forbidden) response, the filter will instead commence the AuthenticationEntryPoint so the principal can authenticate properly. This is a necessary distinction, otherwise principals would always be deemed "authenticated" and never be given an opportunity to login via form, basic, digest or some other normal authentication mechanism.

4
0
分享到:
评论

相关推荐

    实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架

    Acegi是一个专门为SpringFramework应用提供安全机制的开放源代码项目,全称为Acegi Security System for Spring,当前版本为 0.8.3。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和...

    敏捷Acegi、CAS构建安全的Java系统(part2)共四part

    JAVA开发专家:敏捷Acegi、CAS:构建安全的Java系统 pdf

    实战Acegi:使用Acegi作为基于Spring框架的WEB应

    尽管如此,了解Acegi Security对于理解Spring Security的原理和机制仍然非常有帮助。 在实际的项目中,我们还需要处理一些其他安全问题,如CSRF(跨站请求伪造)防护、XSS(跨站脚本攻击)防护以及输入验证等。...

    实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架.pdf

    《实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架》这本书提供了一个很好的起点,它详细介绍了如何设置和使用Acegi,以及如何解决实际开发中的安全问题。 总的来说,Acegi为基于Spring的Web应用提供...

    实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架.rar

    Acegi是Spring Security的前身,它是一个强大的、可...尽管Acegi已被Spring Security所取代,但其核心理念和使用方法在Spring Security中仍然得到延续,因此学习Acegi对于理解Spring Security的安全机制非常有帮助。

    acegi

    Acegi 是一个在Java开发领域,特别是Spring框架中曾经广泛使用的安全组件,全称为Acegi Security。这个系统为Spring应用程序提供了全面的安全管理解决方案,包括身份验证、授权、会话管理以及安全事件处理等功能。...

    Acegi(四):Acegi初体验及初解剖

    尽管Acegi已经被Spring Security所取代,但它的设计理念和核心功能对理解现代Java应用安全依然有价值。 首先,Acegi提供了身份验证和授权服务,确保只有合法用户能够访问应用程序的特定部分。在初体验部分,博主...

    基于java的ACEGI

    在《实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架.pdf》中,可能会详细讲解如何配置和使用Acegi。以下是一些关键步骤: 1. **添加依赖**:首先,在项目中引入Acegi的依赖库,通常是通过Maven或...

    Acegi学习笔记(JAVA系统安全编程时用到)

    Acegi 还提供了许多预定义的安全过滤器,如 UsernamePasswordAuthenticationFilter 和 AnonymousProcessingFilter,它们可以轻松集成到 Filter Chain 中。 总的来说,Acegi 提供了一个强大且灵活的框架,使 Java ...

    使用acegi控制用户权限实例

    尽管Acegi Security是Spring早期的安全解决方案,但它提供了一套全面的工具,对于理解Spring Security(Acegi的现代替代品)的工作原理非常有帮助。在实际项目中,现在通常推荐使用Spring Security,因为它拥有更...

    Acegi例子代码+一个很好的学习Acegi的网址

    2. **授权(Authorization)**:在Acegi中,授权是指确定一个已认证的用户是否有权限访问特定的资源或执行某些操作。它可以基于角色、URL、方法或者更复杂的规则进行控制。 3. **会话管理(Session Management)**...

    权限Acegi的使用

    在实际应用中,我们通常会遵循以下步骤来使用Acegi: 1. **集成Acegi**:将Acegi库添加到项目的类路径中,并在Spring配置文件中声明Acegi的安全配置。 2. **配置安全上下文**:定义安全上下文,指定认证和授权的...

    acegi安全策略与CAS整合

    - AceGI:AceGi Security,一个用于Spring Web应用的安全框架。 - CAS:Central Authentication Service,中心认证服务,提供单一登录解决方案。 - SSO:Single Sign-On,单点登录,用户只需登录一次就能访问所有...

    acegi-context-cas.xml

    acegi与cas集成 &lt;!-- ========= Acegi as a CAS Client的配置============= --&gt; class="org.acegisecurity.ui.cas.CasProcessingFilter"&gt; ref="authenticationManager" /&gt; value="/login.do?...

    使用 Acegi 保护 Java 应用程序: 续二

    6. **源码分析**:由于标签中有“源码”一词,博文可能深入讲解了 Acegi 源码的某个部分,帮助读者理解其内部工作原理,或者展示了如何根据需求自定义 Acegi 组件。 7. **工具使用**:标签中的“工具”可能指的是 ...

    Acegi框架介绍 acegi安全与认证

    【Acegi框架介绍 acegi安全与认证】 Acegi Security,现称为Spring Security,是一个强大的安全框架,主要用于基于Spring的企业级应用。它通过Spring的依赖注入(IoC)和面向切面编程(AOP)功能,提供了声明式的...

    spring acegi 详细文档

    如果你手头有Acegi的详细文档,如acegi.docx和Acegi.zip中的内容,这将是一个宝贵的资源,帮助你深入理解和解决问题。 总结起来,Spring Acegi是一个强大的安全框架,它的功能包括用户认证、权限控制和安全拦截。...

    使用Acegi作为基于Spring框架的WEB应用的安全框架

    Acegi Security,现已被Spring ...结合"acegi-sample.war"和"实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架.pdf",开发者可以更好地理解和掌握Acegi Security的使用方法,从而提升Web应用的安全性。

    ACEGI

    Acegi Security是一个专门为Spring框架设计的权限控制框架,旨在为基于J2EE的企业级应用程序提供全面的安全服务。这个框架解决了J2EE规范中安全性配置不便于移植的问题,使得应用程序的安全设置能够在不同服务器环境...

    Acegi-spring安全框架

    然而,尽管Acegi非常强大,它也有不足之处,如学习曲线较陡峭,配置复杂,对于初学者来说可能较为困难。此外,随着Spring Security的发展,Acegi的一些功能可能已经被更新的版本替代或优化,因此在使用时需要考虑其...

Global site tag (gtag.js) - Google Analytics