1
我有一個通過Spring Security
進行安全保護的Web應用程序。如何防止HTTP會話在WebSocket打開時到期
該應用程序創建一個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
消息。當我再刷新頁面,我重定向到登錄面具,所以最有可能的會話過期... :-)
是喲確定發生了這種情況嗎?這看起來不太可能。 – EJP
看到我更新的答案 – yglodt