采用spring-sessions后迁移HttpSessionListener

时间:2015-05-20 05:49:16

标签: java spring-session

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

上调用getSession()方法来掌握即将销毁的HttpSessionEvent

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

但这并没有满足我的需要。

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

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

  2. 创建会话时没有事件。我们有HttpSessionListener,它在创建会话时可以正常工作。

  3. 那么我有什么选择来获得我们在春季会话中使用HttpSessionListener所具有的功能?

2 个答案:

答案 0 :(得分:2)

Spring Session在春季会话1.1中支持HttpSessionListener。

您必须在HttpSessionConfig文件中将SessionEventHttpSessionListenerAdapter配置为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--------");
}
}

请告诉我这是否有帮助!

答案 1 :(得分:0)

尚不支持HttpSessionListener。请在issue

中投票