2010-03-17 88 views
1

我使用spring + tapestry進行身份驗證webuser。我不知道是否有任何技術我可以強制當前登錄的所有用戶註銷讓我說我的場景是「維護模式下的場景」強制所有會話註銷

p/s:它能夠強制所有用戶「正在運行的進程完成,只有強制註銷

回答

1

的問題是試圖讓他們完成的要求,然後才登陸出來。我假設他們如果在表單上保存,您希望保存數據,但應將其重定向到維護頁面。對於GET請求,如果設置了維護標誌,則可以將用戶註銷。 POST很難實現,因爲您想完成請求,但簽署並將其重定向到維護頁面。我會嘗試一個請求過濾器。像正常一樣處理請求,但然後使會話無效並在設置維護標誌時使用response.sendRedirect。

另一種選擇是在佈局中使用JavaScript計時器 - 定期打一個頁面,看看他們是否應被註銷。這可能不會讓他們完成當前的請求。

+0

@ya,javascript的事情會很好 – cometta 2010-03-18 01:03:55

4

兩件事情,我想起:

  • 使用HttpSessionListener跟蹤所有的會話,並在時機成熟時它們無效。要使用此功能,您需要在ServletContext(或不太優選 - 作爲靜態字段)中使用SetSession對象。每當創建或銷燬會話時更新Set,並在需要失效時迭代集合。

  • 使用Filter(映射到/*)其中,如果滿足某些條件(maintenance == true),則使當前會話無效。因此,所有用戶都將在下一次操作中註銷。這在「維護模式」不意味着「停止整個服務器」的情況下工作,而是意味着「不應該由用戶執行操作,我在不應該受到干擾的背景中做重要事情」

+0

@Bozho我喜歡你的想法 – cometta 2010-03-17 09:17:19

+0

第二個是不是一種選擇,你必須等待下一個動作或爲超時。超時意味着會話已經摧毀了當時強制的內容。而第一種選擇,我不明白它會有什麼幫助。它只有2個方法將在特定事件中被調用。它將如何強制註銷,我不知道。在會話被破壞時執行一些操作可能會有幫助,但那不是問題。 – 2010-03-17 09:31:38

+0

@Adeel Ansari第二個選項可用於保護模式並不意味着「停止服務器」,而是「停止所有用戶操作」的情況。我有過類似的情況。 第一個選項 - 我說「保持跟蹤」 - 這意味着要在創建時存儲對每個會話的引用(最好在靜態變量或servletContext中),並在需要時訪問它們。 – Bozho 2010-03-17 09:43:39