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请求线程中)失效。

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