跨源时如何解决和解决SockJs的/ info路径上的404错误

时间:2019-05-28 06:26:42

标签: websocket cors spring-websocket sockjs

我在使用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();
}

但是,当我的Web客户端尝试针对GET /gs-guide-websocket/info时,它会得到404

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

如何通过spring和/或spring-websocket创建此路径?

谢谢

凯文

1 个答案:

答案 0 :(得分:0)

我没有使用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);      
    }
}