我的Spring Webapp部署在http://localhost:8080/mycontext。 我正在尝试根据https://www.baeldung.com/websockets-spring
上的示例设置简单的网络套接字通信我设置了一个gcloud alpha resource-manager liens list
类,如下所示:
WebSocketConfig
和我的客户端页面(使用javascript)执行以下操作:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat").setHandshakeHandler(new DefaultHandshakeHandler(new TomcatRequestUpgradeStrategy())).withSockJS();
}
}
问题是,尝试建立连接时,我的Chrome控制台显示以下内容:
function connect() {
require([ 'SockJSlib' ], function(SockJS) {
var socket = new SockJS('http://localhost:8080/mycontext/chat');
stompClient = Stomp.over(socket);
stompClient.debug = function(str) {
console.debug(str + "\n");
}
stompClient.connect({}, function(frame) {
//do things I need to do when connected
});
});
}
我一直在这里阅读有关SO和其他地方的各种帖子。他们中的一些建议设置WebSocket connection to 'ws://localhost:8080/mycontext/chat/499/3ddwpqq2/websocket' failed: Error during WebSocket handshake: Unexpected response code: 302
POST http://localhost:8080/mycontext/chat/096/s1figjsq/xhr_streaming?t=1536238976679 403 (Forbidden)
EventSource's response has a MIME type ("text/html") that is not "text/event-stream". Aborting the connection.
POST http://localhost:8080/mycontext/chat/096/onuq0m1f/xhr?t=1536238977361 403 (Forbidden)
(我没有做任何更改)。其他人建议在定义端点时使用DefaultHandshakeHandler
,但是我无法做到这一点,因为我停留在Spring 4.1.0上,并且该版本的spring websocket没有实现该方法。
如果我在浏览器中连接到setAllowedOrigins("*")
,则会收到“欢迎使用SockJS”,因此服务器部分看起来正在运行。
如果真正的问题隐藏在302错误或403错误之后,我有点困惑。我暂时授权http://localhost:8080/mycontext/chat
URL不安全:
/chat/**
但这不会使错误消失。
在这里,我有点不知所措。知道我错过了什么/做错了什么吗?
谢谢。