Веб-приложение 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" />
Но это не устраняет ошибки.
Я немного потерял здесь решения. Есть идеи, что я пропускаю / делаю неправильно?
Спасибо.