WebSockets в Spring - довольно новая тема, в которой я найду немного больше.
Моя проблема заключается в подключении к сервису из другого домена, я работаю с Lineman, создающим интерфейсную часть и Spring Boot, когда делаю заднюю часть, с этим я имею эти приложения на двух разные порты: 8000 и 8080 на localhost.
У меня были проблемы с заголовком "Access-Control-Allow-Origin", но я решил его, добавив фильтр на стороне сервера, который добавил разрешенное начало в заголовок. После этого я начал получать следующую ошибку при подключении:
GET http://localhost:8080/socket/info 403 (Forbidden)
AbstractXHRObject._start @ sockjs-0.3.4.js:807
(anonymous function) @sockjs-0.3.4.js:841
У меня нет Spring Безопасность в проекте, так что это не проблема авторизации, ошибка указывает на sockJS: that.xhr.send(полезная нагрузка); - где полезная нагрузка никогда не определена. Я попытался, но не смог найти корень вызова, где может начаться.
Я думал, если мне нужно добавить дополнительную информацию к SockJS и Stomp при настройке соединения, но на обеих страницах wiki этих инструментов не так много примеров и заметок.
Ниже вы найдете код подключения JS.
var socket = new SockJS("http://localhost:8080/socket");
client = Stomp.over(socket);
client.connect({'login': BoatsGame.userName,
'passcode': 'guest'},
function (frame) {
....
The Server Side has a MessageBroker configured :
@Configuration
@EnableWebSocketMessageBroker
public class MessageBrokerConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Bean
public ServletServerContainerFactoryBean createWebSocketContainer() {
ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
container.setMaxTextMessageBufferSize(8192);
container.setMaxBinaryMessageBufferSize(8192);
return container;
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
//config.enableStompBrokerRelay("/queue", "/topic");
config.enableSimpleBroker("/queue", "/topic","/user");
config.setApplicationDestinationPrefixes("/BoatBattleGame");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
stompEndpointRegistry.addEndpoint("/socket").withSockJS();
}
}
Я также попытался настроить MessageHandler, поскольку он имеет возможность установить OriginAllowe при настройке, но я не уверен, как он связан с брокером.
Подумайте, эта настройка работает правильно при работе на одном порту.