当Spring MVC应用程序启动时,HttpSessionListener.sessionCreated()被调用两次

时间:2016-07-01 06:39:30

标签: java spring spring-mvc spring-session

我在HttpSessionListener中注册了web.xml已实施的类,当应用程序启动时,sessionCreated()方法被调用两次。当我从应用程序注销时,sessionDestroyed()正在调用,然后再次sessionCreated()正在调用。为什么会这样?

public class SessionManager implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {     
           System.out.println("Session Creation called!!..");     
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
           System.out.println("Session Destruction called!!..");   
    }
}

输出:

当应用程序启动时,它会打印"会话创建名为!! .."两次。当我退出时,它首先打印为"会话销毁称为!! .."第二次作为"会话创建被称为!! .."。

1 个答案:

答案 0 :(得分:1)

成功登录应用程序后,在创建新的经过身份验证的会话之前,将销毁旧的匿名会话。注销时也会出现类似的情况,当首次销毁经过身份验证的会话时,会创建一个新的匿名。这与您描述的方案一致。

要验证正在创建和销毁哪些确切的会话,请将日志记录改进为还包括会话ID。例如:

public class SessionManager implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println("session created: " + httpSessionEvent.getSession().getId());
    }

    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println("session destroyed: " + httpSessionEvent.getSession().getId());
    }

}