Java Spring 3.5如何将HttpSessionEventPublisher添加到我的启动配置中
我想听听会话生命周期事件。我读到关于添加Java Spring 3.5如何将HttpSessionEventPublisher添加到我的启动配置中,java,spring,spring-mvc,Java,Spring,Spring Mvc,我想听听会话生命周期事件。我读到关于添加 <listener> <listener-class> org.springframework.security.web.session.HttpSessionEventPublisher </listener-class> </listener> org.springframework.security.web.session.HttpSessionEventPublisher
<listener>
<listener-class>
org.springframework.security.web.session.HttpSessionEventPublisher
</listener-class>
</listener>
org.springframework.security.web.session.HttpSessionEventPublisher
到web.xml。但我没有。我使用的类扩展了SpringBootServletilizer。如何添加此侦听器?在扩展SpringBootSelvletInitializer的类中添加侦听器可以按如下操作
@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链接是
我想这会解决你的问题
Swaraj您可以使用
ServletListenerRegistrationBean
:
@Bean
public ServletListenerRegistrationBean<HttpSessionEventPublisher> httpSessionEventPublisher() {
return new ServletListenerRegistrationBean<HttpSessionEventPublisher>(new HttpSessionEventPublisher());
}
@Bean
public ServletListenerRegistrationBean httpSessionEventPublisher(){
返回新的ServletListenerRegistrationBean(新的HttpSessionEventPublisher());
}
来自SpringBootServletInitializer
javadoc:一个方便的、自以为是的WebApplicationInitializer,适用于只有一个Spring servlet且只包含一个筛选器的应用程序(仅当检测到Spring安全性时才启用)。如果应用程序更复杂,请考虑使用其他WebApple初始化器之一< /P>
因此,如果您希望生成war并包含会话侦听器,则应直接使用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);
只是为了提供官方文件的参考, 在这里,如果您参考,
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"/>
或者您可以使用HttpSessionEventPublisher:
@Bean
public HttpSessionEventPublisher httpSessionEventPublisher() {
return new HttpSessionEventPublisher();
}
如以下描述所示:我已将此代码添加到我的SpringBootServletInitializer类中。但我的问题仍然存在。当用户登录,然后注销并再次尝试登录时,会出现一个关于错误的user\pass的错误。