【问题标题】:How/where can I manage Authentication at SecurityContext in pre-authentation Scenario如何/在哪里可以在预身份验证场景中管理 SecurityContext 的身份验证
【发布时间】:2011-07-19 05:14:34
【问题描述】:

我想知道如何/在哪里可以在预身份验证方案中管理 SecurityContext 的身份验证。

我正在使用 spring security 2.x 在我的项目中实现预认证场景。现在,它可以正常工作了。

用户通过预认证过程登录后,可以被授权相关角色,并能够访问security:filter中定义的资源。

例如

<security:filter-invocation-definition-source lowercase-comparisons="true" path-type="ant">
      <security:intercept-url pattern="/resource/**" access="ROLE_ADMIN" />

在某个控制器中,我想检查安全内容中的主体。

public abstract class AbstractUserAuthenticationController extends AbstractController
{
    protected boolean isAuthenticated(String userName)
    {   
        Object obj = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); // where issue come up

但 SecurityContextHolder.getContext().getAuthentication() 总是返回 null。

另外,我也不能在jsp中使用secuiry标签来检查用户是否具有相关角色

<security:authorize ifNotGranted="ROLE_ADMIN">

 no role found

</security:authorize>

下面显示了我正在使用的“filterChainProxy”。

    <bean id="filterChainProxy" class="org.springframework.security.util.FilterChainProxy">
      <property name="filterInvocationDefinitionSource">
        <value>
          CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
          PATTERN_TYPE_APACHE_ANT 
          /*subscri*=httpSessionContextIntegrationFilter,logoutFilter,j2eePreAuthenticatedProcessingFilter,securityContextHolderAwareRequestFilter,subscribeExceptionTranslationFilter,filterInvocationInterceptor      
          /**=httpSessionContextIntegrationFilter,logoutFilter,j2eePreAuthenticatedProcessingFilter,logoutFilter,rememberMeProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor
        </value>
      </property>
    </bean>


 <bean id="preAuthenticatedAuthenticationProvider" class="org.springframework.security.providers.preauth.PreAuthenticatedAuthenticationProvider">
     <property name="preAuthenticatedUserDetailsService" ref="preAuthenticatedUserDetailsService" />
  </bean>

<bean id="preAuthenticatedUserDetailsService" class="demo.project.security.auth.RsaAuthenticationUserDetailsService" >
   <property name="userService" ref="userService" />
</bean>

<bean id="j2eePreAuthFilter" class="demo.project.security.filter.AutoLoginFilter">
  <property name="authenticationManager" ref="authenticationManager" /> 
  <property name="userService" ref="userService" />
</bean>

我想我需要在某处将 Authentication 设置为 SecurityContext,但我不知道在哪里/在哪里。

我错过了什么?谁能给我一些线索?

谢谢!

伊恩

【问题讨论】:

    标签: spring-security


    【解决方案1】:

    在取回之前,您应该使用SecurityContextHolder.setContext 方法来存储您的SecurityContext

    最简单的方法就是SecurityContextHolder.setContext(new SecurityContextImpl())

    【讨论】:

      猜你喜欢
      • 2011-09-18
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 2021-04-06
      • 2016-12-21
      相关资源
      最近更新 更多