2011-01-18 233 views
7

我使用Spring Security 3.0.0和持久性的RememberMe。當服務器重新啓動並且瀏覽器窗口仍然打開時,我們需要能夠繼續使用該應用程序而無需登錄 - 如果記住我被選中。春季RememberMe processAutoLoginCookie

我得到一個org.springframework.security.web.authentication.rememberme.CookieTheftException:無效的記憶我記號(系列/記號)不匹配。當我嘗試在服務器重新啓動後繼續使用應用程序時,意味着之前的cookie盜用攻擊。 我注意到processAutoLoginCookie方法被調用兩次。我不知道爲什麼。方法本身的行爲似乎是正確的,即更新數據庫中的令牌並更新客戶端中的cookie。

任何幫助,將不勝感激。

謝謝。

+0

您是否找到了解決此問題的答案? – mmatloka

+1

這發生在很久以前,我忘記了細節。但總之這就是問題所在 - 在我個人的情況下,這是因爲我們使用Comet進行長時間投票。所以processAutoLoginCookie方法被長輪詢和常規頁面加載調用一次。因此,在收到第一個響應之前,數據庫中的cookie已經更改。再一次,我忘記了確切的細節,但這是簡單的。 – smk

+0

我已經發布了一個類似的問題,但我自己回答=)。我的解決方案可以在這裏找到 - > [http://stackoverflow.com/questions/13393774/invalid-remember-me-token-series-token-mismatch-implies-previous-cookie-theft/13402874#13402874] (http://stackoverflow.com/questions/13393774/invalid-remember-me-token-series-token-mismatch-implies-previous-cookie-theft/13402874#13402874) – Warner

回答

1

我得到了完全相同的問題! processAutoLoginCookie被連續調用兩次,以便第一次調用成功,但第二次調用失敗,因爲cookie是通過第一次調用更新的。

我唯一的解決方案是將子類PersistentTokenBasedRememberMeServices並覆蓋processAutoLoginCookie方法。我不得不復制processAutoLoginCookie的現有代碼並註釋掉CookieTheftException的投擲。

注:我的解決方案將打開一個安全漏洞!

如果您很樂意允許發生Cookie盜竊(我的系統在內部使用且不包含敏感數據),那麼此解決方案將起作用。

或者,您也可以繼承子類PersistentTokenBasedRememberMeServices並添加更強大的解決方案,該解決方案仍會檢查Cookie盜竊異常,但允許連續調用processAutoLoginCookie