我试图从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/