gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:48:57 26 4
gpt4 key购买 nike

有没有办法区分 Tomcat 容器 session 超时用户按下的注销链接强>?

EDIT1:我的环境详细信息:Java 1.8Apache Tomcat 8.0.36 Windows服务器 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>

我没有为我的 webapp 使用 Spring Security

最佳答案

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

@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


当对象从 session 中移除时(通过 HTTPSessionremoveAttribute() 方法显式地或通过 session )。

关于spring - 如何区分 Tomcat 容器的 session 超时和用户按下的注销链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46662110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com