HttpSessionEventPublisher在java config

时间:2018-04-21 23:14:20

标签: java spring-security

我有一个成熟的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配置中使用它?

1 个答案:

答案 0 :(得分:0)

HttpSessionEventPublisher应该注册为标准侦听器而不是spring bean。检查documentation

所以,我认为你需要使用WebApplicationInitializer注册它,如下所示:

public final class MyWebAppInitializer implements WebApplicationInitializer {
  @Override
  public void onStartup(final ServletContext ctx) {
    ctx.addListener(new HttpSessionEventPublisher());
  }
}