我有一个通过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存活的能力