2

我有一个 Spring 应用程序,其中有一个扩展 HttpSessionEventPublisher 的类。

我将跟踪会话销毁事件。

但是现在我想区分会话是由于会话超时还是由于用户显式注销而被破坏的。

谢谢。

4

1 回答 1

4

查看HttpSessionEventPublisher API,看起来您可以使用在方法HttpSessionDestroyedEvent中作为参数传递的sessionDestroyed()

您可以执行以下操作:

javax.servlet.http.HttpSession session = event.getSession();
long lastAction = session.getLastAccessedTime();
long now = System.currentTimeMillis();
int timeout= getMaxInactiveInterval();
if ((now-lastAction) > timeout)
   //the session has timed out

SecurityContext context = getSecurityContext();
Authentication authentication = context.getAuthentication();
if (!authentication.isAuthenticated())
   //the user has logged out
于 2013-10-31T07:18:06.643 回答