При подключении к WebSocket из моего интерфейса (используя Stomp для Dart):
client = await connect(uri);
Клиент отправляет этот ключ в заголовке:
Sec-WebSocket-Key: ydWCNEacB1ZqiHCH1Ip+vo4mhOw=
И получает ключ обратноиз Spring WebSocket:
Sec-WebSocket-Accept: KVqExHty0Y5/fze11/EAhg==
Это приводит к тому, что клиент выбрасывает:
Соединение WebSocket с 'ws: // user: pass @ localhost: 8080 / ws' не удалось:Ошибка во время рукопожатия WebSocket: неверное значение заголовка Sec-WebSocket-Accept
Я не знаю, как рассчитать правильный ответ.Но в любом случае клиент по какой-то причине не принимает его.
Как мне решить эту проблему?Что может быть причиной проблемы и как я могу ее решить?
Спасибо
Редактировать: добавлена конфигурация websocket:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app").enableSimpleBroker("/topic");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").setAllowedOrigins("*");
registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS();
}
}
Также
@Configuration
public class WebSocketSecurityConfig extends AbstractSecurityWebSocketMessageBrokerConfigurer {
@Override
protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
messages.anyMessage().authenticated();
}
}
Редактировать: я нашел вики, которая описывает, как рассчитать Sec-WebSocket-Key.Следуя приведенному ниже руководству, похоже, ключ неверный.Это не кажется вероятным, хотя или многие другие будут иметь проблемы.https://en.wikipedia.org/wiki/WebSocket