Spring MVC WebSocket: Неожиданный код ответа: 302 - PullRequest
0 голосов
/ 06 сентября 2018

Веб-приложение My Spring развернуто в http://localhost:8080/mycontext. Я пытаюсь настроить простую связь через веб-сокет на примере https://www.baeldung.com/websockets-spring

Я настроил WebSocketConfig класс следующим образом:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

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

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/chat").setHandshakeHandler(new DefaultHandshakeHandler(new TomcatRequestUpgradeStrategy())).withSockJS();
    }
} 

и моя клиентская страница в javascript делает следующее:

function connect() {
    require([ 'SockJSlib' ], function(SockJS) {
        var socket = new SockJS('http://localhost:8080/mycontext/chat');
        stompClient = Stomp.over(socket);  
        stompClient.debug = function(str) {
            console.debug(str + "\n");
        }
        stompClient.connect({}, function(frame) {
            //do things I need to do when connected
        });
    });
}

Проблема в том, что при попытке подключения моя консоль Chrome показывает следующее:

WebSocket connection to 'ws://localhost:8080/mycontext/chat/499/3ddwpqq2/websocket' failed: Error during WebSocket handshake: Unexpected response code: 302

POST http://localhost:8080/mycontext/chat/096/s1figjsq/xhr_streaming?t=1536238976679 403 (Forbidden)

EventSource's response has a MIME type ("text/html") that is not "text/event-stream". Aborting the connection.

POST http://localhost:8080/mycontext/chat/096/onuq0m1f/xhr?t=1536238977361 403 (Forbidden)

Я читал различные посты здесь, на SO и в других местах. Некоторые из них предлагают установить DefaultHandshakeHandler (что я и сделал без изменений). Другие предлагают использовать setAllowedOrigins("*") при определении конечной точки, но я не могу этого сделать, так как я застрял в Spring 4.1.0, и эта версия Spring Websocket не реализует этот метод.

Если я подключаюсь в браузере к http://localhost:8080/mycontext/chat, я получаю «Welcome to SockJS», поэтому серверная часть выглядит так, как будто она работает.

Я немного сбит с толку, если настоящая проблема скрывается за ошибкой 302 или за 403. На данный момент я разрешил /chat/** URL-адресам не иметь никакой защиты:

<http pattern="/chat/**" security="none" />

Но это не устраняет ошибки.

Я немного потерял здесь решения. Есть идеи, что я пропускаю / делаю неправильно?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...