我有一个成熟的java Web应用程序,它使用spring security(4.2.3,java8,tomcat8),并且包含一个允许用户查询会话注册表以查看还有谁登录的视图。这取决于HttpSessionEventPublisher到用户注销时通知会话注册表。 最初的实现使用了web.xml配置,但我现在大部分重新实现了使用java配置。我重构的最后一件事是HttpSessionEventPublisher。 当我将它从web.xml声明移动到我的WebSecurityConfigurerAdapter时,它停止了工作。具体而言,不再从注册表中删除已注销的会话。 我知道bean正在被实例化(正在调用工厂方法)。
这是参考文档中建议的java配置:
@Bean
public HttpSessionEventPublisher httpSessionEventPublisher() {
return new HttpSessionEventPublisher();
}
是否需要一些技巧才能在java配置中使用它?
答案 0 :(得分:0)
HttpSessionEventPublisher
应该注册为标准侦听器而不是spring bean。检查documentation。
所以,我认为你需要使用WebApplicationInitializer
注册它,如下所示:
public final class MyWebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(final ServletContext ctx) {
ctx.addListener(new HttpSessionEventPublisher());
}
}