Ошибка во время рукопожатия WebSocket: неверное значение заголовка Sec-WebSocket-Accept - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть соединение websocket с пружинной загрузкой, которое стоит за spring-security-kerberos для достижения единого входа.Это работает как положено, но если я перезагружаю сервер, я вижу, что клиенты не могут повторно соединиться с ошибкой Error during WebSocket handshake: Incorrect 'Sec-WebSocket-Accept' header value.

Я использую @ stomp / stompjs 4.0.8 и настройку stompClient.reconnect_delay = 5000

Есть ли способ решить эту проблему?Я обеспокоен тем, что выполнение этого за балансировщиком нагрузки может привести к возникновению этой ошибки постоянно.

Это основано на примере Messaging-stomp-websocket + spring-securityWebSocket-аутентификации

1 Ответ

0 голосов
/ 06 декабря 2018

Похоже, что spring-security-web RequestCacheAwareFilter извлекает кэшированный запрос, в результате чего действительное значение заголовка Sec-WebSocket-Key заменяется недействительным.

последовательность событий такова, что каждый раз, когда клиент пытается повторно подключиться, клиент делает два запроса веб-сокета, первый отклоняется с WWW-Authenticate: Negotiate header, а второй содержит Authorization *Заголовок 1009 * имеет другое значение Sec-WebSocket-Key .

Мне удалось решить эту проблему путем полного отключения кэширования, например, в пределах WebSecurityConfigurerAdapter

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