2011-03-22 74 views
0

我使用Spring Security 3.0並創建了一個自定義過濾器來檢查過期的會話。會話過期後Java仍然爲Request.isRequestedSessionValid()

我的問題是,即使我讓會話過期或註銷,request.isRequestedSessionValid()在我的過濾器中返回true。如果我嘗試訪問任何受保護的頁面,我會重定向到我的登錄頁面,因此我知道會話管理工作正常。

我的理解是,當Web會話超時時,會話將自動失效,並且我還會在Spring Security的註銷元素中設置invalidate-session。會話如何仍然有效?我檢查錯誤的值嗎?

+0

我不確定這個調用是否會創建一個會話,如果沒有。嘗試'request.getSession(false)'。如果返回null,那麼你的另一個調用正在創建一個sesssion,所以用它來檢查。 – Melv 2011-03-22 21:35:48

+0

看起來你是對的,使用request.getSession(false)爲我修復它。添加您的評論作爲答案,我會將其標記爲已接受。 謝謝 – 2011-03-22 22:00:39

回答

2

request.isRequestedSessionValid()本身可以導致會話被創建,即使在註銷被調用之後。使用request.getSession(false) != null進行檢查,以確保不會創建會話。