使用会话范围的bean将会话到期与Spring中的“强制”注销区分开来

时间:2013-01-30 15:58:43

标签: session spring-mvc

我正在尝试处理会话过期,仅用于记录porpouse。

我已经阅读了DestructionAwareBeanPostProcessor,但似乎没有被调用。所以我试图为bean实现一个destroy方法,这就是调用它。

这种方法的问题在于我无法区分bean在会话到期时被销毁的时间或“强制”注销的消息。

我试图实现一个HttpSessionListener但我无法访问会话bean ..

任何帮助或建议?

1 个答案:

答案 0 :(得分:0)

你好@Enrichman你可以做这样的实现:

public class HttpSessionRenew implements HttpSessionListener {
   SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

   public HttpSessionRenew() {
        super();
   }

   public void sessionCreated(HttpSessionEvent event) {
        HttpSession session = event.getSession();
        System.out.println("TIME: " + session.getMaxInactiveInterval());
        System.out.println("ID Session "+session.getId()+" create "+session.getCreationTime());
   }

   public void sessionDestroyed(HttpSessionEvent event) {
        HttpSession session = event.getSession();

        // print out the session id
        if(session != null) {
           System.out.println( "Session Id: " + session.getId() );
           synchronized(session) {
              // invalidating a session destroys it
              session.invalidate();
              System.out.println("DESTROYD SESSION");
           }
        }
        System.out.println("ID Session "+session.getId()+" destroyd "+ f.format(new Date()));
   }
 }

的web.xml

 <listener>
     <listener-class>your.fully.qualified.name.HttpSessionRenew</listener-class>
 </listener>

 <!-- CONFIGURATION TIME -->
 <session-config>
     <session-timeout>30</session-timeout>
 </session-config>

我希望能帮到你:)