2011-03-20 27 views
0

我想知道在預先身份驗證場景中如何/在哪裏管理SecurityContext中的身份驗證。我如何/在哪裏可以在預認證情況下在SecurityContext中管理身份驗證場景

我正在使用spring security 2.x在我的項目中實現預認證方案。現在,它可以工作。

用戶通過預先認證過程登錄後,可以通過相關角色進行身份驗證,並且可以訪問安全性中定義的資源:過濾器。

例如

<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。

另外,我也不能使用secuiry標籤在JSP來檢查,如果用戶有相關作用

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

我缺少什麼?任何人都可以提供一些線索嗎?

謝謝!

伊恩

回答

0

您應該使用SecurityContextHolder.setContext方法來存儲得到它回到你SecurityContext之前。

這樣做的最簡單方法就是SecurityContextHolder.setContext(new SecurityContextImpl())

相關問題