如何使用spring检测tomcat会话过期

Posted

技术标签:

【中文标题】如何使用spring检测tomcat会话过期【英文标题】:how to detect tomcat session expiration using spring 【发布时间】:2013-09-06 12:10:30 【问题描述】:

我正在使用spring运行检票口并使用spring security,当tomcat会话时,web.xml中声明的会话过期

<session-config>
    <session-timeout>1</session-timeout>
</session-config>

我想使用过滤器捕获此事件(不覆盖现有的 httpSession 或 Session ) 我怎样才能使用弹簧来实现呢?

10 倍

【问题讨论】:

【参考方案1】:

您可以使用侦听器类来实现此目的。定义如下监听组件:

@Component
public class AppLogoutListener implements
        ApplicationListener<SessionDestroyedEvent> 


    @Override
    public void onApplicationEvent(SessionDestroyedEvent event) 
        // from event you can obtain SecurityContexts to work with


    


您需要在 web.xml 中定义会话事件发布者:

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

这里HttpSessionEventPublisher 会在会话创建和过期时发布会话生命周期事件。

【讨论】:

这将添加对 Spring Security 的依赖(如果您已经拥有它,这不一定是问题)。您也可以自己实现HttpSessionListener 并实施sessionDestroyed 方法。无论您选择哪种方法,当用户注销您的应用程序时也会调用它(无法通过代码区分过期和调用 session.invalidate

以上是关于如何使用spring检测tomcat会话过期的主要内容,如果未能解决你的问题,请参考以下文章

如何记录 tomcat 会话失效或用户注销

如何最好地检测 ASP.NET 过期会话?

创建会话时如何检测过期的访问令牌?

如何使 PHP 中的用户会话过期?

如何使用 spring-security 和 jQuery 处理过期会话?

Tomcat 会话 cookie 不会过期