如何区分Tomcat容器的会话超时和用户按下的注销链接?

时间:2017-10-10 08:34:52

标签: spring spring-mvc session tomcat httpsession

是否可以通过 Tomcat容器 区分 会话超时,并按用户注销链接强>

EDIT1:我的环境详细信息: Java上的 Java 1.8 Apache Tomcat 8.0.36 Server 2012

我有一个实现MyHttpSessionListener

javax.servlet.http.HttpSessionListener
public class MyHttpSessionListener implements HttpSessionListener {         
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println(httpSessionEvent.getSession().getId()+" was CREATED");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println(httpSessionEvent.getSession().getId()+" was DESTROYED");
    }
}

以及web.xml文件中的相应配置声明

<listener>
    <listener-class>com.webapp.listeners.MyHttpSessionListener</listener-class>
</listener>

我没有将Spring Security用于我的网络应用。

2 个答案:

答案 0 :(得分:1)

TagData[0][0]将在Servlet级别处理它。这里有一个重要的问题是您使用的是哪个应用程序/ Web服务器? 你需要看看SessionDeletedEvent and SessionExpiredEvent
现在试试SessionDestroyedEvent

HttpSessionListener

您还需要在@Component public class SessionEndedListener implements ApplicationListener<SessionDestroyedEvent> { @Override public void onApplicationEvent(SessionDestroyedEvent event) { for (SecurityContext securityContext : event.getSecurityContexts()) { Authentication authentication = securityContext.getAuthentication(); YourPrincipalClass user = (YourPrincipalClass) authentication.getPrincipal(); // do something } } }

中注册
web.xml

更新答案
在最近的编辑之后,对于这种情况,你需要使用

<listener>
    <listener-class>
        org.springframework.security.web.session.HttpSessionEventPublisher
    </listener-class>
</listener>


当从会话中删除对象时(通过HttpSessionBindingListener 的{​​{1}}方法或会话的无效/过期),将调用此方法。

答案 1 :(得分:0)

您可以解析会话lastAccessTime,如果它在某个时间之前(已配置的过期时间),则该过期。