当前位置:首页 > 开发 > 开源软件 > 正文

Spring Security(11)——匿名认证

发表于: 2014-12-03   作者:234390216   来源:转载   浏览:
摘要: 匿名认证 目录 1.1     配置 1.2     AuthenticationTrustResolver          对于匿名访问的用户,Spring Security支持为其建立一个匿名的AnonymousAuthenticat

匿名认证

目录

1.1     配置

1.2     AuthenticationTrustResolver

 

       对于匿名访问的用户,Spring Security支持为其建立一个匿名的AnonymousAuthenticationToken存放在SecurityContextHolder中,这就是所谓的匿名认证。这样在以后进行权限认证或者做其它操作时我们就不需要再判断SecurityContextHolder中持有的Authentication对象是否为null了,而直接把它当做一个正常的Authentication进行使用就OK了。

 

1.1     配置

       使用NameSpace时,http元素的使用默认就会启用对匿名认证的支持,不过我们也可以通过设置http元素下的anonymous元素的enabled属性为false停用对匿名认证的支持。以下是anonymous元素可以配置的属性,以及它们的默认值。

      <security:anonymous enabled="true" key="doesNotMatter" username="anonymousUser" granted-authority="ROLE_ANONYMOUS"/>

 

       key用于指定一个在AuthenticationFilterAuthenticationProvider之间共享的值。username用于指定匿名用户所对应的用户名,granted-authority用于指定匿名用户所具有的权限。

       与匿名认证相关的类有三个,AnonymousAuthenticationToken将作为一个Authentication的实例存放在SecurityContextHolder中;过滤器运行到AnonymousAuthenticationFilter时,如果SecurityContextHolder中持有的Authentication还是空的,则AnonymousAuthenticationFilter将创建一个AnonymousAuthenticationToken并存放在SecurityContextHolder中。最后一个相关的类是AnonymousAuthenticationProvider,其会添加到ProviderManagerAuthenticationProvider列表中,以支持对AnonymousAuthenticationToken的认证。AnonymousAuthenticationToken的认证是在AbstractSecurityInterceptor中的beforeInvocation()方法中进行的。使用http元素定义时这些bean都是会自动定义和添加的。如果需要手动定义这些bean的话,那么可以如下定义:

   <bean id="anonymousAuthFilter"

   class="org.springframework.security.web.authentication.AnonymousAuthenticationFilter">

      <property name="key" value="doesNotMatter" />

      <property name="userAttribute" value="anonymousUser,ROLE_ANONYMOUS" />

   </bean>

 

   <bean id="anonymousAuthenticationProvider"

   class="org.springframework.security.authentication.AnonymousAuthenticationProvider">

      <property name="key" value="doesNotMatter" />

   </bean>

 

       key是在AnonymousAuthenticationProviderAnonymousAuthenticationFilter之间共享的,它们必须保持一致,AnonymousAuthenticationProvider将使用本身拥有的key与传入的AnonymousAuthenticationTokenkey作比较,相同则认为可以进行认证,否则将抛出异常BadCredentialsExceptionuserAttribute属性是以usernameInTheAuthenticationToken,grantedAuthority[,grantedAuthority]的形式进行定义的。

 

1.2     AuthenticationTrustResolver

       AuthenticationTrustResolver是一个接口,其中定义有两个方法,isAnonymous()isRememberMe(),它们都接收一个Authentication对象作为参数。它有一个默认实现类AuthenticationTrustResolverImplSpring Security就是使用它来判断一个SecurityContextHolder持有的Authentication是否AnonymousAuthenticationTokenRememberMeAuthenticationToken。如当ExceptionTranslationFilter捕获到一个AccessDecisionManager后就会使用它来判断当前Authentication对象是否为一个AnonymousAuthenticationToken,如果是则交由AuthenticationEntryPoint处理,否则将返回403错误码。

 

(注:本文是基于Spring Security3.1.6所写)

(注:原创文章,转载请注明出处。原文地址:http://haohaoxuexi.iteye.com/blog/2163041

 

 

Spring Security(11)——匿名认证

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframewor
在第一节 Spring Security笔记:Hello World 的基础上,只要把Spring-Security.xml里改一个位置 1 &
不深入理解Spring security的工作流程,无法感知基于Sping secury的CAS登录流程和权限管理,对从全
在上一篇文档中,对Spring Security中的身份认证的流程和管理进行了详细介绍,本文将从实践的角度告
zhiqian我们采用了配置文件的方式从数据库中读取用户进行登录。虽然该方式的灵活性相较于静态账号密
摘要:Spring Security与Oauth2整合步骤中详细描述了使用过程 ,但它对于入门者有些重量级,比如将
本文在上一篇博文的基础上,将使用数据库中的用户进行身份认证。从本文中你将会看到Spring Security
先来谈一谈Acegi的基础知识,Acegi的架构比较复杂,但是我希望我下面的只言片语能够把它说清楚。大
在认识Spring Security之前,所有的权限验证逻辑都混杂在业务逻辑中,用户的每个操作以前可能都需要
在使用Spring Security配置Web应用之前,首先要准备一个基于Maven的Spring框架创建的Web应用(Sprin
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号