如何/在何处可以在预身份验证方案中管理SecurityContext上的身份验证

时间:2011-03-20 17:35:42

标签: spring-security

我想知道如何/在哪里可以在预认证场景中管理SecurityContext上的身份验证。

我正在使用spring security 2.x在我的项目中实现pre-verntation Scenario。现在,它很有用。

用户通过预先验证过程登录后,可以使用相关角色进行身份验证,并且能够获得安全性中定义的资源:filter。

e.g。

<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,但我不知道在哪里/哪里。

我缺少什么?任何人都可以提供一些线索吗?

谢谢!

伊恩

1 个答案:

答案 0 :(得分:0)

您应该使用SecurityContextHolder.setContext方法存储SecurityContext,然后才能将其恢复。

执行此操作的最简单方法是SecurityContextHolder.setContext(new SecurityContextImpl())