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

我也希望跟踪会话销毁事件。

但是现在我要区分是由于会话超时还是由于用户显式注销破坏了会话。

谢谢。

最佳答案

浏览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

关于java - Spring session 破坏事件区分 session 超时和注销,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19699701/

10-10 06:42