如何在spring mvc 3和servlet 3.0中的会话到期时收到通知

时间:2013-01-17 20:18:16

标签: spring-mvc servlet-3.0 httplistener spring-social

使用tomcat 7,servlet 3.0,spring mvc3 with spring social,我让我的班级听会话;

public class AClass implements ApplicationContextAware, HttpSessionListener{

...
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            this.applicationContext = applicationContext;
            if (applicationContext instanceof WebApplicationContext) {
                ((WebApplicationContext) applicationContext).getServletContext().addListener(this);
    }

    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("session created");
    }

    public void sessionDestroyed(HttpSessionEvent se){
        System.out.println("session destroyed");

    }
...
}

我在web.xml中将会话超时设置为1分钟(我确信它正常工作) 当我打开一个页面时,我得到了“会话创建”消息,但我从未得到“会话被破坏”。 如果我在1分钟后刷新页面,我再次收到“会话已创建”消息,该消息声称会话已过期。

所以问题是我出错了什么?当会话过期时,sessionDestroyed方法不应该通知我吗?

1 个答案:

答案 0 :(得分:0)

是的,会话在超时或者使用以下方式以编程方式到期时销毁:

HttpSession.invalidate()

请参阅此blog以确保您正确执行所有操作。

此外,servletcontainer不会在超时值之后立即销毁会话。有一个后台工作,以一定的时间间隔运行,如5~15分钟。因此,很可能因为这个原因你没有立即在控制台中看到被破坏的行。