WebSocket 握手期间出错:不正确的"Sec-WebSocket-Accept"标头值



我有一个弹簧启动websocket连接,它位于spring-security-kerberos后面以实现SSO。 这按预期工作,但是如果我重新启动服务器,我看到客户端无法重新连接,并出现错误Error during WebSocket handshake: Incorrect 'Sec-WebSocket-Accept' header value

我正在使用@stomp/stompjs 4.0.8并设置stompClient.reconnect_delay = 5000

有什么办法可以解决这个问题吗? 我担心在负载均衡器后面运行它会导致此错误一直发生。

这是基于消息传递-stomp-websocket示例+弹簧安全websocket-身份验证

似乎 spring-security-webRequestCacheAwareFilter提取了一个缓存的请求,这导致实际的Sec-WebSocket-Key标头值被替换为无效的值。

事件的顺序是,每次客户端尝试重新连接时,客户端都会发出两个 websocket 请求,第一个请求被拒绝,并带有WWW-Authenticate: 协商标头,第二个包含授权标头具有不同的Sec-WebSocket-Key值。

我能够通过完全禁用缓存来解决此问题,例如在WebSecurityConfigurerAdapter

@Override
protected void configure(final HttpSecurity http) throws Exception {
http.requestCache().requestCache(new NullRequestCache())
}

相关内容

最新更新