跨域资源共享和Spring Websocket

4
我按照这个教程创建了一个Spring Boot应用程序,服务于websockets连接,但我无法从除了Spring Boot本身服务的客户端之外的其他客户端连接到这些websockets。 GitHub仓库中的complete目录包含最终的Spring Boot代码。我从该存储库中获取了index.htmlapp.js文件,并创建了在Node.js服务器上运行的另一个客户端。之后,我替换了连接字符串以指向localhost:8080(其中运行着Spring Boot)。然后我运行了Node.js服务器并尝试使用websockets,但它不起作用。
第一个问题很容易解决,只需将.setAllowedOrigins(“*”)添加到StompEndpointRegistry注册表即可。通过此配置,我成功连接到websocket,但现在我无法从套接字获得任何消息。
我想知道我错过了什么......有人知道问题是什么吗?
提取的文件包括 index.html 和已重命名为 index.jsapp.js 文件,以及用于测试的 Node.js 服务器 在此处。要运行它,只需安装依赖项 (npm install),然后发出 npm start 命令即可。服务器将在 http://localhost:3000/ 上响应。
1个回答

5
实际上,这个问题很愚蠢。问题在于当我将HTML/JS文件提取到外部应用程序时,我将代码中所有硬编码的三个点都改成了http://localhost:8080/...
var socket = new SockJS('http://localhost:8080/gs-guide-websocket');
// ...
stompClient.subscribe('http://localhost:8080/topic/greetings', cb);
// ...
stompClient.send("http://localhost:8080/app/hello", ...);

我应该更改的唯一一行是第一行。其他两个函数只是用于在已经打开的套接字上订阅和发送主题消息的功能。因此,它们不需要URL作为前缀...

var socket = new SockJS('http://localhost:8080/gs-guide-websocket');
// ...
stompClient.subscribe('/topic/greetings', cb);
// ...
stompClient.send("/app/hello", ...);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接