从其他线程关闭http会话

时间:2012-03-20 08:34:28

标签: web-applications servlets spring-mvc session-state httpsession

我使用Spring MVC实现了一个Web应用程序。 Web应用程序集成在具有桌面用户界面的系统中。我想允许用户从destkop GUI关闭Web应用程序的会话。

我尝试实现一个非常优雅的解决方案:调用httpsession的无效,但有时在正在运行的http请求中使用无效的会话时会中断。它在尝试调用render(特别是在WebUtil.getSessionAttribute)时在DispatcherServlet处抛出IllegalStateException,因为它试图访问会话属性并且会话已经无效。

所以我的问题是:有没有办法从非http请求线程中激活用户的会话,而不会与运行http请求冲突?或者至少是我可以管理的冲突。

谢谢,

豪尔赫

1 个答案:

答案 0 :(得分:2)

您可以手动滚动涉及您要过期的静态会话集的机制,以及检查当前会话的此集的servlet过滤器,然后调用session.invalidate并干净地重定向用户。您的桌面API只会向此集添加一个会话,并且用户将在以下请求时干净地(在HTTP请求线程中)失效。

为了防止内存泄漏,您还需要一个侦听器在失效时从该集合中删除会话 - 从而确保此集合仅包含有效会话。