如何在WebSocket打开时阻止http会话过期

时间:2014-03-25 08:44:39

标签: java spring-security websocket

我有一个通过Spring Security保护的网络应用程序。

应用程序创建WebSocket并将通知消息推送给客户端。

但是,由于有时长时间没有页面重新加载,但只有WebSocket条消息,HTTP session过期,WebSocket会关闭。

有没有办法让Spring Security只要连接WebSocket就保持会话存活,即使没有HTTP请求进来?

这是我的Spring Security配置:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
    .csrf().disable()
    .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
    .and()
    .authorizeRequests()
    .anyRequest()
    .access("hasAnyRole('ROLE_ADMIN') or hasIpAddress('127.0.0.1/32') or hasIpAddress('192.168.0.0/24') or hasIpAddress('192.168.1.0/24')")
    .and()
    .formLogin().loginPage("/login")
    .loginProcessingUrl("/checklogin")
    .usernameParameter("user")
    .passwordParameter("pass")
    .defaultSuccessUrl("/", true)
    .failureUrl("/login?failed=true")
    .permitAll()
    .and()
    .logout()
    .logoutUrl("/logout")
    .logoutSuccessUrl("/login")
    .deleteCookies("JSESSIONID")
    .invalidateHttpSession(true)
    .permitAll();
}

当我不在任何允许的网络中时,我会获得登录表单。使用ROLE_ADMIN登录后,我会暂时停止收到WebSocket条消息。当我刷新页面时,我被重定向到登录掩码,所以很可能会话已过期......: - )

1 个答案:

答案 0 :(得分:1)

您可能需要查看spring-session

  

WebSocket - 提供在接收WebSocket消息时保持HttpSession处于活动状态的能力