Spring会话destroy事件区分会话超时和注销

时间:2013-10-31 06:23:00

标签: java spring session spring-mvc session-timeout

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

我一直在追踪会话毁灭事件。

但现在我想区分会话是否因会话超时或用户明确注销而被破坏。

感谢。

1 个答案:

答案 0 :(得分:3)

查看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