2016-11-11 89 views
0

我的應用使用http和stomp over WebSocket。所以我需要刷新我的httpSession當用戶使用WebSockets所以不發明自行車我決定使用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"); 
     } 
    }; 
} 

但它不工作過。

我用SpringSession與H2的存儲,我的配置是:

@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(); 
    } 
} 

預先感謝您。

回答