2

我已經使用Spring MVC實現了一個Web應用程序。 Web應用程序集成在具有桌面用戶界面的系統中。我想允許用戶從destkop GUI關閉Web應用程序的會話。關閉來自其他線程的http會話

我試着實現一個非常優雅的解決方案:調用httpsession的無效,但有時會在運行http請求中使用失效的會話時中斷。當它試圖調用render(特別是在WebUtil.getSessionAttribute)時會在DispatcherServlet上拋出IllegalStateException,因爲它試圖訪問會話屬性並且會話已失效。

所以我的問題是:有沒有辦法從非HTTP請求線程的會話踢用戶,而不會與運行的http請求發生衝突?或者至少是我可以管理的衝突。

感謝,

豪爾赫

+0

嗯我知道你可以通過JMX獲取一些會話信息。 Apache Tomcat。您可以使用JMX控制檯檢查您的應用程序服務器/ servlet容器。如果可以結束會話,則可以以編程方式使用JMX API。 – fasseg 2012-03-20 08:46:40

+0

謝謝@fas。我將看看JMX API。無論如何,我想獨立於Web應用程序服務器來使用它。那麼讓我們看看是否有人也知道其他選項。 – Jorge 2012-03-21 08:39:13

回答

2

你可以手工卷涉及一組靜態要終止會話的機制,Servlet過濾器來檢查這組當前會話,然後調用session.invalidate並乾淨地重定向用戶。您的桌面API只會將一個會話添加到這個集合中,並且在下面的請求時,用戶會乾淨地(在HTTP請求線程中)失效。

爲了防止內存泄漏,您還需要偵聽器在失效時從該集合中刪除會話,從而確保該集合僅包含有效會話。