如何防止http会话过期,而WebSocket是开放的



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

应用程序创建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消息后一段时间。当我刷新页面时,我被重定向到登录掩码,所以很可能会话已经过期了…: -)

您可能想看看spring-session

WebSocket -提供在接收WebSocket消息时保持HttpSession存活的能力

相关内容

  • 没有找到相关文章

最新更新