Как устранить неполадки и устранить ошибку 404 на пути SockJs / info в случае перекрестного источника - PullRequest
0 голосов
/ 28 мая 2019

У меня проблемы с 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?

Спасибо,

Кевин

1 Ответ

0 голосов
/ 11 июня 2019

Я не использую протокол STOMP, в то время как я настроил веб-сокет с SockJS, который отлично работает для меня.

Здесь полезная нагрузка сообщения отправлена ​​в ответ на интерфейс.

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);      
    }
}
...