私のアプリはWebSocketでhttpとstompを使用します。だから私は、WebSocketを使用するときに私のhttpSessionをリフレッシュする必要があります。これはHttpとWebSocketsの間の明確な統合を提供するので、Spring Sessionを使用することを決めた自転車を発明しません。しかし、私は問題に直面していた。セッションイベントは春のセッションでは動作しません
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addListener(new HttpSessionEventPublisher());
...
}
そしてそれは完璧に働いていた:私はTOMCATセッションの実装を使用する場合、私はこのリスナーを持っていました。セッションレジストリがSessionDestroyEventを受信し、セッションを破棄しました。
現在、H2に基づくSpringセッションでは動作しません。 私はこのような異なるアプローチを試みました:
@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();
}
}
は、事前にありがとうございます。