【发布时间】:2017-03-26 01:04:22
【问题描述】:
我的应用程序使用 http 和 stomp over WebSocket。所以当用户使用 WebSockets 时我需要刷新我的 httpSession 所以为了不发明自行车我决定使用 Spring Session,因为这提供了 Http 和 WebSockets 之间的清晰集成。但是我遇到了一个问题。当我使用 TOMCAT SESSION 实现时,我有这个监听器:
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addListener(new HttpSessionEventPublisher());
...
}
而且效果非常好。会话注册表收到一个 SessionDestroyEvent 并销毁了一个会话。
现在,使用基于 H2 的 Spring Session,它不起作用。 我尝试了这样的不同方法:
@Bean
public HttpSessionEventPublisher httpSessionPublisher() {
return new HttpSessionEventPublisher();
}
@Bean
public HttpSessionListener httpSessionListener() {
return new HttpSessionListener() {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("I EXIST");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("I EXIST");
}
};
}
但它也不起作用。
我使用带有 H2 存储的 SpringSession,我的配置是:
@EnableJdbcHttpSession(maxInactiveIntervalInSeconds = 15)
public class H2SessionConfig {
@Bean(name = "session_dataSource")
public EmbeddedDatabase dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("org/springframework/session/jdbc/schema-h2.sql").build();
}
@Bean
public PlatformTransactionManager transactionManager(@Qualifier("session_dataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public HttpSessionEventPublisher httpSessionEventPublisher() {
return new HttpSessionEventPublisher();
}
@Bean
public HttpSessionListener httpSessionListener() {
return new HttpSessionListener() {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("I EXIST");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("I EXIST");
}
};
}
@Bean
public HttpSessionEventPublisher httpSessionPublisher() {
return new HttpSessionEventPublisher();
}
}
提前谢谢你。
【问题讨论】:
标签: java spring session tomcat spring-session