HttpSessionEventPublisher 在 java config 中不起作用



我有一个成熟的Java Web应用程序,它使用spring安全性(4.2.3,java8,tomcat8(,并包含一个视图,允许用户查询会话注册表以查看还有谁登录了。这取决于 HttpSessionEventPublisher 在用户注销时通知会话注册表。最初的实现使用 web.xml config,但现在我主要使用 java config 重新实现它。我重构的最后一件事是HttpSessionEventPublisher。当我将其从 web.xml 声明移动到我的 WebSecurityConfigurerAdapter 中时,它停止了工作。具体而言,注销的会话不再从注册表中删除。我知道正在实例化 bean(正在调用工厂方法(。

这是参考文档中建议的 java 配置:

@Bean
public HttpSessionEventPublisher httpSessionEventPublisher() {
    return new HttpSessionEventPublisher();
}

是否需要一些技巧才能使其在 java 配置中工作?

HttpSessionEventPublisher应该注册为标准侦听器,而不是Spring Bean。 查看文档。

因此,我认为您需要使用以下WebApplicationInitializer进行注册:

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

最新更新