我有一个通过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
条消息。当我刷新页面时,我被重定向到登录掩码,所以很可能会话已过期......: - )