Java 在Spring 3/Spring Security 2.0.5中检测会话超时

Java 在Spring 3/Spring Security 2.0.5中检测会话超时,java,spring,servlets,spring-mvc,spring-security,Java,Spring,Servlets,Spring Mvc,Spring Security,我有一个在Spring3和SpringSecurity 2.0.5下运行的web应用程序。 为了向用户展示自上次访问以来对站点所做的更改,我尝试注册他的会话被破坏的时间。因此,我注册了org.springframework.context.ApplicationListener,还注册了javax.servlet.http.HttpSessionListener。 实现的方法在用户使用注销链接时起作用。但是当会话超时时,就好像没有生成事件一样 我是不是忘了听正确的事情了?或者会话超时没有触发任何

我有一个在Spring3和SpringSecurity 2.0.5下运行的web应用程序。 为了向用户展示自上次访问以来对站点所做的更改,我尝试注册他的会话被破坏的时间。因此,我注册了
org.springframework.context.ApplicationListener
,还注册了
javax.servlet.http.HttpSessionListener
。 实现的方法在用户使用注销链接时起作用。但是当会话超时时,就好像没有生成事件一样


我是不是忘了听正确的事情了?或者会话超时没有触发任何事件?有没有其他方法可以做到这一点?它是否取决于服务器设置(即tomcat 6.0.24 btw)?

我不使用Spring,因此没有关于这一点的措辞,但在正确实现和注册后应该可以工作。您需要在
web.xml
中将其注册为
,如下所示:

<listener>
    <listener-class>com.example.MyHttpSessionListener</listener-class>
</listener>

com.example.MyHttpSessionListener
请记住,您正在以正确的方式测试会话超时。例如,关闭webbrowser窗口不会立即破坏服务器端的会话。只要客户端在30分钟内没有发送任何HTTP请求,会话就会一直有效。这30分钟是默认会话超时,可通过
web.xml
中的
项进行配置

此外,servletcontainer不会在超时值之后立即销毁会话。它是一个后台作业,以一定的间隔运行(例如,根据负载和servletcontainer的品牌/类型,5~15分钟)。因此,当您在30分钟的不活动之后没有看到调用
sessionDestroyed()
方法时,不要感到惊讶。但是,当您对超时但尚未销毁的会话发出HTTP请求时,它将立即被销毁

另见:

我认为,DelegatingSessionListener方法可能有用。这里已经提到:


似乎我太不耐烦了,忽略了一些空点异常:D它有效。谢谢