2010-10-28 49 views
2

在Tomcat下激活基本授權時,有人遇到Spring安全登錄問題嗎?春季安全與Tomcat基本授權之間的衝突

註銷登錄頁面後登錄時,登錄根本無法登錄。如果你刷新頁面,然後再試一次,一切都很好:)(。

+0

您應該在「消息」下半年變成一個答案,上半年的問題。那麼你可以獲得一些聲譽! – 2011-02-18 11:03:13

+0

感謝您的建議! :) – Edgar 2011-03-01 06:05:27

+0

你走了。 :-) – 2011-03-01 09:19:01

回答

5

我找不到任何抱怨這樣的行爲,花了一整天的時間來找出問題。最後,它彈出,原因是錯誤在Tomcat中,可用的版本從6.0.20到6.0.28(Bug 49598

問題在於Tomcat的基本授權和Spring安全性在授權請求期間會替換會話。會話,在同一個請求處理期間觸發兩個會話替換之後的直接登錄請求。但是,在錯誤的結果中,響應中的Set-Cookie頭仍然指向由Tomcat給出的會話ID(由Spring安全,因爲它的工作ER)。所以,下一個請求會發送已經被銷燬的會話的cookie。 Spring創建的會話(包含簽名用戶)仍然未被聲明。

最好的解決方案是Tomcat 6.0.29 :-)。 如果有人有Tomcat的升級問題,有3種可能性,以避免故障:

  1. 禁用會話更換的Tomcat。您可以在context.xml中做配置閥門

    <Valve className="org.apache.catalina.authenticator.BasicAuthenticator" 
               changeSessionIdOnAuthentication="false"/> 
    
  2. 禁用會話更換春季安全配置的security.xml的。

    <http ... session-fixation-protection="none"> 
        ..... 
    </http> 
    
  3. 註銷後提供額外的重定向。通過這種方式,Tomcat將在登錄請求期間在會話中緩存一條原則。

也許這可以保護越來越瘋狂像我昨天:)

與問候, 埃德加有人