WebSockets in Spring è un argomento piuttosto nuovo che sto stancando di trovare un po 'di più.Spring WebSocket Connessione con SockJS a un dominio diverso
Il mio problema è con la connessione a un servizio da un dominio diverso, sto lavorando con Lineman che costruisce il front-end e Spring Boot quando si fa il back-end, con che ho queste app su due diversi porte: 8000 e 8080 su localhost.
Ho riscontrato problemi con l'intestazione 'Access-Control-Allow-Origin' ma l'ho risolto aggiungendo un filtro sul lato server che ha aggiunto l'origine consentita all'intestazione. Dopo questo ho iniziato a ottenere il seguente errore sulla connessione:
GET http://localhost:8080/socket/info 403 (Forbidden)
AbstractXHRObject._start @ sockjs-0.3.4.js:807
(anonymous function) @sockjs-0.3.4.js:841
Non ho Primavera di sicurezza nel progetto quindi questo non è un problema di autorizzazione, i punti di errore a sockJS: that.xhr.send (carico utile); - dove il carico utile non è mai definito. Ho provato ma non sono riuscito a trovare la radice della chiamata da dove è stato possibile iniziare.
Stavo pensando se è necessario aggiungere alcune informazioni aggiuntive a SockJS e Stomp quando si imposta la connessione, ma non ci sono molti esempi e note in entrambe le pagine wiki di questi strumenti.
Qui sotto troverai il codice JS della connessione.
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();
}
}
ho provato anche la creazione di un messageHandler in quanto ha la possibilità di impostare OriginAllowe durante la configurazione, ma non sono sicuro di come è collegato al broker.
Ultimo pensiero, questa configurazione funziona correttamente quando si esegue su una porta.
Hai mai questo lavoro? Sto avendo lo stesso problema. – jax
Ho ottenuto questo lavoro in un'applicazione di primavera impostando le origini consentite. 'registry.addEndpoint ('/ websocket/models'). setAllowedOrigins (" * "). withSockJS();' – jax
Grazie mille a tutti e due. Ragazzi avete fatto la mia giornata. – havish