从我的前端连接到WebSocket时(使用Stomp for 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