spring - Spring - Sock.js - websockets:被 CORS 策略阻止
问题描述
我正在客户端应用程序上使用sock.js
+stomp.js
将 websockets 实现到 Spring App。尝试连接时出现错误:
Access to XMLHttpRequest at 'http://localhost:8080/ws/tracker/info?t=...' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
在我的WebsocketConfiguration
:
@Configuration
@EnableWebSocketMessageBroker
@Order(Ordered.HIGHEST_PRECEDENCE + 99)
public class WebsocketConfiguration implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws")
.setAllowedOrigins("*")
.withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic/", "/queue/");
registry.setApplicationDestinationPrefixes("/app");
}
}
客户端库:
<script src="https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.4.0/sockjs.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.js"></script>
客户端连接:
var socket = new SockJS('http://localhost:8080/websocket/tracker');
我已经在早期的一个项目中实现了 websockets,所以这都是从它那里复制过来的,尽管我不记得(也找不到)如何解决这个错误。
解决方案
检查是否有ClientForwardController
,映射应该是这样的:
@GetMapping(value = {"/{path:[^\\.]*}", "/{path:^(?!websocket).*}/**/{path:[^\\.]*}"})
public String forward() {
return "forward:/";
}
推荐阅读
- garmin - 后台服务委托中的 Garmin makeWebRequest 无法从回调中唤醒应用程序
- reactive-programming - 如何使用项目反应器定期采样通量?
- agda - AGDA 中案例拆分的未绑定变量
- kubernetes - Pod 与具有相同标签的节点的亲和性
- python - Python ModuleNotFoundError 没有名为“自定义”的模块
- scala - Spark 和 CSV:如何从推断的模式中判断哪些列允许为空?
- javascript - 如果我的函数不适用于工作表中的数据,则使用 IF 语句创建错误消息
- powershell - PowerShell 帮助 - 隐藏错误 [新手]
- bash - 未找到 GitlabCI 工件
- r - 在多列中查找/分配平均值