我有一个spring boot(1.3.2)应用程序,我在其中实现了一个HttpSessionListener。我从@Configration类注册了监听器
@Configuration
@EnableRedisHttpSession
public class ApplicationSessionConfiguration {
@Bean
public ServletListenerRegistrationBean<HttpSessionListener> sessionListener() {
return new ServletListenerRegistrationBean<HttpSessionListener>(new SessionListener());
}
}
我已经调试了ServletListenerRegistrationBean.onInitialize方法,并且监听器已经注册了ServletContext。问题是,当我对应用程序进行虚拟REST调用时,会话被正确创建并作为SESSION cookie发回,但HttpSessionListener.createSession方法永远不会被调用。我不确定我在这里缺少什么。
答案 0 :(得分:1)
看起来您需要的功能尚未在稳定版本中发布。但是根据this ticket,这是固定的,可用于春季会话的1.1.0 M1版本。您可能想尝试1.8.0.RC1发布的spring-session,看看这是否有助于你想要的。有关如何完成此操作的确切详细信息,请参见in this doc link
如果使用1.1.0.RC1版本不是一个选项(或者如果您不想因为任何原因而不使用RC1),您仍然可以通过使用自己的实现扩展默认的CookieHttpSessionStrategy来拦截会话创建和销毁事件(比如说) MyCookieHttpSessionStrategy)然后重写onNewSession(..)和onInvalidateSession(..)来拦截这些事件。将MyCookieHttpSessionStrategy注册为普通bean并且您已全部设置(它将由Redis会话存储库自动获取)。这适用于Redis会话,我正在以这种方式在我的春季启动Web应用程序中使用这些事件。
希望这会有所帮助!!