是否可以通过 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
用于我的网络应用。
答案 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,如果它在某个时间之前(已配置的过期时间),则该过期。