我已经使用 Spring MVC 实现了一个 Web 应用程序。 Web 应用程序集成在具有桌面用户界面的系统中。我想允许用户从 destkop GUI 关闭 Web 应用程序的 session 。
我尝试实现一个不太优雅的解决方案:调用httpsession的invalidate,但当在正在运行的http请求中使用正在失效的 session 时,它有时会中断。当它尝试调用渲染时(特别是在 WebUtil.getSessionAttribute 处),它会在 DispatcherServlet 处抛出 IllegalStateException,因为它正在尝试访问 session 属性并且 session 已经无效。
所以我的问题是:有没有什么方法可以将用户从非 http 请求线程的 session 中踢出,而不与正在运行的 http 请求发生冲突?或者至少是我可以处理的冲突。
谢谢
豪尔赫
最佳答案
您可以手动滚动一个机制,涉及一组要过期的静态 session ,以及一个 servlet 过滤器,该过滤器检查该组当前 session ,然后调用 session.invalidate
并重定向用户干净。您的桌面 API 只需向该集合添加一个 session ,并且用户将根据以下请求彻底失效(在 HTTP 请求线程中)。
为了防止内存泄漏,您还需要一个监听器在失效时从该集合中删除 session ,从而确保该集合仅包含有效 session 。
关于web-applications - 从其他线程关闭 http session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9783534/