7

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

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

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

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

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

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

那么,为了让我们在春季会话中使用 HttpSessionListener 所拥有的功能,我必须有哪些选择?

4

2 回答 2

8

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);
}

正如您在上面看到的,我已经注册了名为 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--------");
}
}

让我知道这是否有帮助!

于 2016-04-12T09:56:12.197 回答
0

尚不支持 HttpSessionListener。请在问题中投票

于 2015-07-24T23:31:14.813 回答