采用 spring-sessions 后迁移 HttpSessionListener

Pal*_*jan 6 java spring-session

我们最近开始在我们的项目中使用 spring-session。这是一个遗留应用程序,我们有一些HttpSessionListener。因此,当会话过期或用户无效时,将sessionDestroyed(HttpSessionEvent se)调用会话方法。您可以HttpSession通过调用getSession()方法来获取即将被销毁的HttpSessionEvent

Spring session 也有类似的东西。Redis Session Repository 实现将触发org.springframework.session.events.SessionDestroyedEvent事件,您可以向其添加ApplicationListener以进行一些处理。

但这并不能满足我的需要。

我遇到的问题是,即使由于 2 个主要原因,它也不能用于迁移我们现有的 HttpSessionListener 以使用这些

  1. Spring Session 触发的事件只给出即将被销毁的会话 id。它不提供整个会话对象的副本。所以如果我现有的 HttpSessionListener 有一些逻辑来使用某些属性进行某些处理,我现在不能这样做。

  2. 创建会话时没有事件。我们有 HttpSessionListener 在创建会话时会做一些工作。

那么我有什么所有选项才能获得我们在 Spring 会话中使用 HttpSessionListener 工作的功能?

Adi*_*ith 7

Spring Session 从 spring session 1.1 开始支持 HttpSessionListener。

您必须将 SessionEventHttpSessionListenerAdapter 配置为 HttpSessionConfig 文件中的 bean,如下所示:

@Bean
public SessionEventHttpSessionListenerAdapter session() {
        List<HttpSessionListener> listeners = new ArrayList<HttpSessionListener>();
        listeners.add(new MyListener());
        return new SessionEventHttpSessionListenerAdapter(listeners);
}
Run Code Online (Sandbox Code Playgroud)

正如您在上面看到的,我已经注册了名为 MyListener 的自定义 HttpSessionListener。在这里,您可以根据需要配置会话创建和销毁事件。

public class MyListener implements HttpSessionListener {

@Override
public void sessionCreated(HttpSessionEvent se) {
    System.out.println("CREATED--------");
}

@Override
public void sessionDestroyed(HttpSessionEvent se) {
    System.out.println("DELETED--------");
}
}
Run Code Online (Sandbox Code Playgroud)

让我知道这是否有帮助!


Rob*_*nch 0

尚不支持 HttpSessionListener。请对该问题进行投票