欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

5. Spring Session 监听器-HttpSessionListener

程序员文章站 2024-03-20 10:20:52
...

我们知道在普通web 应用中, 是可以自定义session监听器的, 可以监听session的创建和销毁过程, 然后在session的创建和销毁时做一些初始化或清理操作. spring session中也支持自定义session 监听器, 而且配置更简单.

1. HttpSessionListener 定义

自定义监听器时需要实现HttpSessionListener接口, 所以我们首先看一下HttpSessionListener 接口的定义. 接口只定义了两个方法, 分别用于监听session 的创建和销毁.

ackage javax.servlet.http;

import java.util.EventListener;

public interface HttpSessionListener extends EventListener {

    // 监听session 的创建
    default void sessionCreated(HttpSessionEvent se) {
    }

    // 监听session 的销毁
    default void sessionDestroyed(HttpSessionEvent se) {
    }
}

2. 自定义SessionListener

2.1 自定义session Listener

自定义sessionListener 需要实现HttpSessionListener接口, 并实现创建或销毁方法.

/**
 * @Description: 自定义session 监听器, 监听session的创建和销毁
 * @author: zongf
 * @date: 2019-04-17 08:53
 */
public class MyHttpSessionListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println(LocalDateTime.now() + "-" + se.getSession().getId() + "-created");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println(LocalDateTime.now() + "-" + se.getSession().getId() + "-destroyed");
    }
}

2.2 注册监听器

只需要将监听器实例注册到spring 容器中, 即可实现对session的监听. 笔者将session相关的配置都放着类SessionConfig.java中.

@Bean
public MyHttpSessionListener myHttpSessionListener(){
    return new MyHttpSessionListener();
}

3. 测试输出

为了能看到session的销毁, 笔者将session 失效时间设置为30秒. 但是需要注意的是, 通常生产环境并不会这样设置, 一般设置都是30分钟以上.

2019-04-17T08:58:04.820-1674c1f3-d540-4e43-9c10-2131ccd5f571-created
2019-04-17T08:58:34.984-1674c1f3-d540-4e43-9c10-2131ccd5f571-destroyed