我试图从HttpSessionListener捕获sessionDestroyed事件,以检查是否由sessionTimeout触发。

在调试时,我可以看到一个名为“ expiring”的属性,根据文档,该属性用于内部跳过某些异常。


  即将到期
  我们当前正在处理会话到期,因此绕过某些IllegalStateException测试。
  Source


问题是,因为此属性设置为“ protected”,所以我无法检查此事件是否由会话超时有效触发。

我需要捕获此会话超时事件以将记录保存到数据库中。

有人能帮我吗?

这是我到目前为止所拥有的:

public class AppHttpSessionListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent se) {
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        LOG.log(Level.INFO, "DEBUG: SESION DESTRUIDA");
    }
    private static final Logger LOG = Logger.getLogger(AppHttpSessionListener.class.getName());

}

最佳答案

也许您可以尝试估算一下?

@Override
    public void sessionDestroyed(HttpSessionEvent se) {

    HttpSession httpSession = se.getSession();

    long lastAccessedTime = httpSession.getLastAccessedTime();
    int maxInactiveTime = httpSession.getMaxInactiveInterval();

     if ((System.currentTimeMillis() - lastAccessedTime) >= (maxInactiveTime*1000) {
         LOG.log(Level.INFO, "DEBUG: SESION DESTRUIDA");
   }

关于java - 从HttpSession对象获取过期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45422615/

10-10 08:57