2016-11-11 15 views
0

私のアプリは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(); 
    } 
} 

は、事前にありがとうございます。

答えて

関連する問題