首页 > 解决方案 > 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,所以这都是从它那里复制过来的,尽管我不记得(也找不到)如何解决这个错误。

标签: springwebsocketsockjs

解决方案


检查是否有ClientForwardController,映射应该是这样的:

@GetMapping(value = {"/{path:[^\\.]*}", "/{path:^(?!websocket).*}/**/{path:[^\\.]*}"})
public String forward() {
    return "forward:/";
}

推荐阅读