【问题标题】:How to troubleshoot and resolve 404 on SockJs's /info path when with cross-origin跨域时如何解决和解决 SockJs 的 /info 路径上的 404
【发布时间】:2019-05-28 06:26:41
【问题描述】:

我在使用 SockJs 和 CORS 时遇到问题。我用弹簧。我将 WebMvcConfigured 设置如下:

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurer() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry
                    .addMapping("/**")
                    .allowedOrigins("http://localhost:3000")
                    .allowCredentials(true);
            ;
        }
    };
}

和WebSocketConfig如下:

    @Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    config.enableSimpleBroker("/topic");
    config.setApplicationDestinationPrefixes("/app");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry
            .addEndpoint("/gs-guide-websocket")
            .setAllowedOrigins("*")
            .withSockJS();
}

但是,当我的网络客户端尝试 GET 反对 /gs-guide-websocket/info 时,它会得到一个 404

SockJs 的规范要求存在/info 路径。似乎即使我确实在服务器端使用了.withSockJS(),它也没有设置/gs-guide-websocket/info 路径。

我应该如何通过spring 和/或spring-websocket 创建这条路径?

谢谢,

凯文

【问题讨论】:

    标签: websocket cors spring-websocket sockjs


    【解决方案1】:

    我没有使用 STOMP 协议,而我已经使用 SockJS 配置了 websocket,这对我来说很好。

    此处消息负载已作为响应发送到前端。

    CustomWebSocketHandler.java

    @Component
    public class CustomWebSocketHandler extends TextWebSocketHandler {
    
        @Override
        protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
            String payload = message.getPayload();
            JsonObject jsonObject = new JsonObject();
            jsonObject.addProperty("message", "Session started");
            jsonObject.addProperty("payload", payload);
            session.sendMessage(new TextMessage(new Gson().toJson(jsonObject)));
        }   
    }
    

    WebSocketConfig.java

    @EnableWebSocket
    @Configuration
    public class WebSocketConfig implements WebSocketConfigurer {
    
        @Autowired
        private CustomWebSocketHandler customWebSocketHandler;
        
        public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
    
            webSocketHandlerRegistry
                .addHandler(customWebSocketHandler, "/socket")
                .setAllowedOrigins("*")
                .withSockJS()
                .setHeartbeatTime(20);      
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 2017-08-30
      • 2011-11-26
      • 2019-12-01
      • 1970-01-01
      相关资源
      最近更新 更多