2016-11-11 140 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(); 
    } 
} 

预先感谢您。

回答