我们最近开始在我们的项目中使用spring-session。这是一个遗留应用程序,我们有一些HttpSessionListener。因此,当会话过期或用户无效时,将调用会话sessionDestroyed(HttpSessionEvent se)
方法。您可以通过在HttpSession
getSession()
方法来掌握即将销毁的HttpSessionEvent
春季会议也有类似的东西。 Redis会话存储库实现将触发org.springframework.session.events.SessionDestroyedEvent
事件,您可以向其添加ApplicationListener以进行一些处理。
但这并没有满足我的需要。
我遇到的问题是,它不能用于迁移我们现有的HttpSessionListener来使用这些,即使是因为2个主要原因
Spring Session触发的事件仅提供即将销毁的会话ID。它不提供整个会话对象的副本。因此,如果我现有的HttpSessionListener有一些逻辑使用某些属性进行某些处理,我现在就不能这样做。
创建会话时没有事件。我们有HttpSessionListener,它在创建会话时可以正常工作。
那么我有什么选择来获得我们在春季会话中使用HttpSessionListener所具有的功能?
答案 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
中投票