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 以使用这些
Spring Session 触发的事件只给出即将被销毁的会话 id。它不提供整个会话对象的副本。所以如果我现有的 HttpSessionListener 有一些逻辑来使用某些属性进行某些处理,我现在不能这样做。
创建会话时没有事件。我们有 HttpSessionListener 在创建会话时会做一些工作。
那么我有什么所有选项才能获得我们在 Spring 会话中使用 HttpSessionListener 工作的功能?
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)
让我知道这是否有帮助!
| 归档时间: |
|
| 查看次数: |
1952 次 |
| 最近记录: |