我使用Spring MVC实现了一个Web应用程序。 Web应用程序集成在具有桌面用户界面的系统中。我想允许用户从destkop GUI关闭Web应用程序的会话。
我尝试实现一个非常优雅的解决方案:调用httpsession的无效,但有时在正在运行的http请求中使用无效的会话时会中断。它在尝试调用render(特别是在WebUtil.getSessionAttribute)时在DispatcherServlet处抛出IllegalStateException,因为它试图访问会话属性并且会话已经无效。
所以我的问题是:有没有办法从非http请求线程中激活用户的会话,而不会与运行http请求冲突?或者至少是我可以管理的冲突。
谢谢,
豪尔赫
答案 0 :(得分:2)
您可以手动滚动涉及您要过期的静态会话集的机制,以及检查当前会话的此集的servlet过滤器,然后调用session.invalidate
并干净地重定向用户。您的桌面API只会向此集添加一个会话,并且用户将在以下请求时干净地(在HTTP请求线程中)失效。
为了防止内存泄漏,您还需要一个侦听器在失效时从该集合中删除会话 - 从而确保此集合仅包含有效会话。