我想听会话生命周期事件。我读到了关于添加
的内容<listener>
<listener-class>
org.springframework.security.web.session.HttpSessionEventPublisher
</listener-class>
</listener>
到web.xml。但我没有。我正在使用扩展SpringBootServletInitializer的类。我如何添加这个监听器?
答案 0 :(得分:16)
您可以使用ServletListenerRegistrationBean
:
@Bean
public ServletListenerRegistrationBean<HttpSessionEventPublisher> httpSessionEventPublisher() {
return new ServletListenerRegistrationBean<HttpSessionEventPublisher>(new HttpSessionEventPublisher());
}
答案 1 :(得分:0)
在Class中添加可以扩展SpringBootSelvletInitializer的Listener,如下所示。
@Configuration
public class Application extends SpringBootServletInitializer {
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
SpringApplicationBuilder app=application.sources(Application.class, ComponentConfiguration.class);
app.listeners(bootstrapContext.commandLineListener());
return app;
}
由于构建器类具有侦听器方法,该方法用于添加所有要注册的侦听器。 SpringApplicationBuilder的Github链接是http://goo.gl/EGj6jE
我认为这将解决您的问题。
斯瓦拉杰
答案 2 :(得分:0)
来自SpringBootServletInitializer
javadoc:一个方便的自以为是的WebApplicationInitializer,用于只有一个Spring servlet的应用程序,并且只有一个过滤器(它本身仅在检测到Spring Security时启用)。如果您的应用程序更复杂,请考虑使用其他WebApplicationInitializers
因此,如果您想要生成战争,并且想要包含会话侦听器,则应直接使用WebApplicationInitializer
。以下是javadoc中的一个示例:
public class MyWebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
// Create the 'root' Spring application context
AnnotationConfigWebApplicationContext rootContext =
new AnnotationConfigWebApplicationContext();
rootContext.register(AppConfig.class);
// Manage the lifecycle of the root application context
container.addListener(new ContextLoaderListener(rootContext));
// Create the dispatcher servlet's Spring application context
AnnotationConfigWebApplicationContext dispatcherContext =
new AnnotationConfigWebApplicationContext();
dispatcherContext.register(DispatcherConfig.class);
// Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher =
container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
由于您在ServletContext完全初始化之前可以完全控制它,因此很容易添加您的监听器:
container.addListener(YourListener.class);
答案 3 :(得分:0)
只是提供官方文档的参考, http://docs.spring.io/spring-session/docs/current-SNAPSHOT/reference/html5/#httpsession-rest
如果您参考HttpSessionListener
主题,则会在Java
和XML
配置方式中找到明确的示例。
如果您的配置支持Redis
@Configuration
@EnableRedisHttpSession
public class RedisHttpSessionConfig {
@Bean
public HttpSessionEventPublisher httpSessionEventPublisher() {
return new HttpSessionEventPublisher();
}
// ...
}
在XML配置中,这可能看起来像
<bean class="org.springframework.security.web.session.HttpSessionEventPublisher"/>
答案 4 :(得分:0)
或者你可以使用 HttpSessionEventPublisher:
@Bean
public HttpSessionEventPublisher httpSessionEventPublisher() {
return new HttpSessionEventPublisher();
}