WebSockets in Spring — довольно новая тема, и я уже устал искать что-то еще.
Моя проблема заключается в подключении к службе из другого домена, я работаю с Lineman над созданием внешнего интерфейса и Spring Boot при выполнении внутреннего интерфейса, при этом у меня есть эти приложения на двух разных портах: 8000 и 8080 на локальном хосте.
У меня были проблемы с заголовком «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 Security в проекте, так что это не проблема авторизации, ошибка указывает на sockJS: that.xhr.send(payload); - где полезная нагрузка никогда не определяется. Я пытался, но не смог найти корень вызова, с которого может начинаться.
Я думал, нужно ли мне добавить дополнительную информацию в SockJS и Stomp при настройке соединения, но на обеих вики-страницах этого инструмента не так много примеров и заметок.
Ниже вы найдете 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 при настройке, но я не уверен, как он связан с брокером.
Наконец, подумайте, эта настройка работает правильно при работе на одном порту.