2016-07-22 100 views
0

有人可以幫助我解決這個問題。感謝你的幫助。Spring Security 3.1

我正在使用Spring安全性3.1和create-session =「stateless」選項。 拋出「InsufficientAuthenticationException」:「ExceptionTranslationFilter異常」需要完全認證才能訪問此資源。

我不明白我在做什麼錯,爲什麼我得到這個異常。由於這個例外說,證書不正確,但我可以看到證書正在通過request.Still我越來越401未經授權

事實是,用戶能夠正確登錄&我也得到消息控制檯上。但由於拒絕訪問異常,它又重定向到登錄頁面。

在這裏,我就知道我將代碼

彈簧security.xml文件

<http entry-point-ref="negotiateSecurityFilterEntryPoint" 
     create-session="stateless" > 
     <intercept-url pattern="/user/loginuser" access="ROLE_ANONYMOUS"/> 
     <intercept-url pattern="/**" access="ROLE_USER"/> 
     <custom-filter ref="securityContextPersistenceFilter"   after="BASIC_AUTH_FILTER" /> 
     <custom-filter ref="ldapAuthFilter" position="CAS_FILTER" />     
     <custom-filter ref="databaseAuthFilter" position="FORM_LOGIN_FILTER" /> 
</http> 


<bean id="securityContextPersistenceFilter" class="org.springframework.security.web.context.SecurityContextPersistenceFilter"> 
     <property name='securityContextRepository'> 
      <bean class='org.springframework.security.web.context.HttpSessionSecurityContextRepository'> 
       <property name='allowSessionCreation' value='false' /> 
      </bean> 
     </property> 
    </bean> 
+0

請編輯您的問題的標題是一個實際的問題,因爲它目前不是一個。 – carlspring

回答

1

,這恰恰是無狀態的意思做。

一旦將create-session參數設置爲無狀態,每次http調用都不會調用SecurityContextPersistenceFilter(默認情況下),或者即使強制根據您的配置調用它,它也不會SecurityContextHolder中的任何會話級安全信息。

此無狀態模式旨在用於休息式體系結構,其中每個請求都發送身份驗證和授權信息。還好說,我不認爲無狀態會話創建模式應該被使用,除非你正在開發一個完整的無狀態應用

,我發現這一點,Spring Security Session Management好的帖子,如果是會話創建仔細部分2.看?

因此,無狀態會話創建策略不適合典型的登錄表單模式。

在您的場景中,我猜想發生的情況是,一旦完成登錄請求並請求進行身份驗證,它可能會重定向到使用HTTP 301或302重定向的一種歡迎頁面,重定向沒有攜帶身份驗證信息,因此會再次重定向到登錄頁面。

如果您只是使用「ifRequired」作爲會話創建,或者它是默認值,就不要設置它,我敢打賭您的登錄將成功結束並重定向到正確的位置而無需登錄再次。而且,如果你這樣做,避免設置SecurityContextPersistenceFilter,它會自動配置。

+0

謝謝lumietu ..是的,如果我使用「ifrequired」肯定會工作,但你認爲這將是無國籍的應用程序。因爲它最終會創建會話 – ashishl

+0

正如您所說的,登錄表單模式不適合創建無狀態會話。那麼我們如何才能將登錄表單排除爲無狀態和其他請求是無狀態的。 – ashishl

+0

如果要安全地應用無狀態應用程序,則必須在每個請求中發送身份驗證信息,甚至使用某種會話令牌。 – jlumietu

相關問題