2011-04-28 46 views
1

我的應用使用struts2 + spring + hibernate,我在做一些session-interceptor-login-authorization系統,它的工作正常,現在我嘗試實現會話過期的部分,我遇到了問題: 首先會話攔截器檢查每個請求,看看用戶是否在會話中,如果沒有,則將其重定向到登錄頁面,否則它通過請求的操作。struts2會話過期應用範圍

  • 因此如果用戶剛剛開始應用的登錄頁面彈出

  • 在會話,因爲在web.xml中的會話超時屬性及其然後重定向到

    登錄頁的超時

現在我有一個會話過期消息被顯示的請求。 因此,我決定使用應用範圍,並設置一些變量,如UserLoggedIn ,現在回到攔截器,我可以檢查用戶是否在會話中,如果它的空值檢查變量UserLoggedIn的應用範圍,所以如果創建,則會話是過期(sessionExpired.jsp),否則爲login.jsp。 問題是,無論何時我關閉瀏覽器並重新打開它,該應用程序的範圍仍然存在,並且它具有UserLoggedIn變量,因此可以說我想啓動瀏覽器和我的應用程序 ,因此會話攔截器將其解僱並找不到用戶在會議GReat!但它發現UserLoggedIn變量告訴這不是一個全新的開始,所以會話過期消息彈出。我知道它的一種混亂我不知道這是否是正確的方式來做這個會話過期的事情;這是我的第一次嘗試。

任何建議,可供選擇的方法等,將是非常讚賞

PD:我知道有更好的方法爲確保您的應用程序如春的安全 我專門2天但失敗了,因爲時間因素Im的不能繼續嘗試白色它

回答

1

它可能會更容易將會話時間移出到自己的攔截器,也就是每次使用攔截器時,如果時間值太大,它會爲用戶設置一個時間值調用將被重定向到會話超時頁面。畢竟這是會話告訴你,它是陳舊的,所以你應該能夠避免應用程序級邏輯。

+1

感謝您的回答,是否有任何特殊的lib,我必須用於servlet超時或只是一個adhoc實現,並檢查此值是否大於x值,當攔截器再次觸發設置時間? – Jesse 2011-04-28 23:25:16

+0

我會用你陳述的adhoc實現去。當用戶登錄時,您將該用戶的某個標識符粘貼到會話中,然後您可以將時間戳值粘貼到會話中或可能粘貼到數據庫中(如果您還有DBA帽子,爲什麼不)。如果你確實把數據放入數據庫,你可以很容易地使一個很酷的誰在管理頁面上簽名,並且可能包含一些使用指標=)這對測試非常有用,而且管理人員喜歡「通過肩膀工具」。 – Quaternion 2011-04-29 17:32:05