java - 当登录用户关闭浏览器时,如何强制 Tomcat 删除过期的 session ?

标签 java servlets spring-security tomcat7 session-timeout

我实现了一个 SessionListener 来跟踪我的网络服务器的打开 session

我在我的web.xml中设置:

<listener>
    <listener-class>demo.MyHttpSessionListener</listener-class>
</listener>
<session-config>
    <session-timeout>1</session-timeout> 
</session-config>

我的 demo.MyHttpSessionListener.groovy:

class MyHttpSessionListener implements HttpSessionListener {
   @Override
   public void sessionCreated(HttpSessionEvent event) {
    ...
   }

     @Override
     public void sessionDestroyed(HttpSessionEvent event) {
       ...
     }
}

当我访问我的网站时,sessionCreated 被调用。当我关闭浏览器并等待 session 超时时,将调用 sessionDestroyed

当我登录网站并关闭浏览器时会出现此问题。在这种情况下,sessionDestroyed在超时后永远不会被调用。为什么当用户登录并关闭浏览器时 session 永远不会被删除? 在关闭浏览器并等待超时时间后,我需要做什么才能删除登录用户的过期 session ?

最佳答案

这是解决方案。即使您在 web.xml 中设置了 session 超时,当用户登录时,Spring Security 也会覆盖该值。超时设置为:

session.maxInactiveInterval = -1

因此,您必须再次覆盖此值才能使 session 超时生效。

关于java - 当登录用户关闭浏览器时,如何强制 Tomcat 删除过期的 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16675588/

相关文章:

spring - loadUserByUsername 未被调用

java - 使用循环和通用 vfs 无法从 .iso 获取文件系统。 (JAVA)

java - 来自 Clazz.clone 的新 clazz(this) 是否存在风险?

java - 统计访问次数的 Servlet

java - 对于 sendredirect ,哪个方法被调用 doGet 或 doPost()

java - 即使使用正确的用户名/密码,Spring 2.5 登录也没有响应

java - Spring Security 中未执行登录

java - 使用 Intellij IDEA 14 在使用 JRebel 的同时远程调试 Tomcat 服务器上的应用程序

java - 如何使用 thead 和 tbody 创建 FlexTable

java - 如何在 Servlet 中注入(inject) ConversationScoped bean