WebSocket握手-意外的响应代码200-AngularJs和Spring Boot [英] WebSocket Handshake - Unexpected response code 200 - AngularJs and Spring Boot
问题描述
当我尝试在AngularJS应用和Spring Boot之间建立Websocket通信时,出现错误: websocket握手期间出错-意外的响应代码:200 .
When I tried to establish websocket communication between AngularJS app and Spring Boot I'm getting the error: Error during websocket handshake - Unexpected response code: 200.
这是我的JS代码:
function run(stateHandler, translationHandler, $websocket) {
stateHandler.initialize();
translationHandler.initialize();
var ws = $websocket.$new('ws://localhost:8080/socket'); // instance of ngWebsocket, handled by $websocket service
ws.$on('$open', function () {
console.log('Oh my gosh, websocket is really open! Fukken awesome!');
});
ws.$on('/topic/notification', function (data) {
console.log('The websocket server has sent the following data:');
console.log(data);
ws.$close();
});
ws.$on('$close', function () {
console.log('Noooooooooou, I want to have more fun with ngWebsocket, damn it!');
});
}
这是我的Java代码:
And here is my Java code:
WebsocketConfiguration.java
WebsocketConfiguration.java
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry)
{
stompEndpointRegistry.addEndpoint("/socket")
.setAllowedOrigins("*")
.withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
}
WebsocketSecurityConfiguration.java
WebsocketSecurityConfiguration.java
@Override
protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
messages
// message types other than MESSAGE and SUBSCRIBE
.nullDestMatcher().authenticated()
// matches any destination that starts with /rooms/
.simpDestMatchers("/topic/tracker").hasAuthority(AuthoritiesConstants.ADMIN)
.simpDestMatchers("/topic/**").permitAll()
// (i.e. cannot send messages directly to /topic/, /queue/)
// (i.e. cannot subscribe to /topic/messages/* to get messages sent to
// /topic/messages-user<id>)
.simpTypeMatchers(SimpMessageType.MESSAGE, SimpMessageType.SUBSCRIBE).denyAll()
// catch all
.anyMessage().denyAll();
}
有人知道如何解决此问题吗?
预先谢谢你!
Does anyone have an idea how to fix this problem?
Thank you in advance!
推荐答案
我遇到了类似的问题,我正在使用chrome插件(简单的WebSocket客户端)测试我的websocket连接,并尝试连接到ws://localhost: 8080/handler/,在我的代码中定义为registry.addEndpoint("/handler").setAllowedOrigins("*").withSockJS();
,但发生意外错误200.我已通过将/websocket附加到chrome扩展程序上的客户请求字符串中来解决此问题,因此您可以尝试在JS文件中更改以下行:
I had a similiar problem, I was testing my websocket connection using an chrome plugin (Simple WebSocket Client) and was trying to connect to ws://localhost:8080/handler/ which is defined in my code as registry.addEndpoint("/handler").setAllowedOrigins("*").withSockJS();
but unexpected error 200 was occuring. I've fixed this by appending /websocket to my client request string on the chrome extension, so what you could try is to change in your JS file the following line:
var ws = $websocket.$new('ws://localhost:8080/socket');
到
var ws = $websocket.$new('ws://localhost:8080/socket/websocket');
我不知道为什么要固定它的原因,我只是偶然发现了它,如果some1可以进一步阐明它,那将是非常好的:)
I dont know the reason why this fixed it in my case i just randomly stumbled upon it, if some1 could clarify it more it would be really nice :)
这篇关于WebSocket握手-意外的响应代码200-AngularJs和Spring Boot的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!