I have a web application served by an Angular frontend and Spring Boot backend. They are deployed with a multi-stage Docker build on the same server. I had an issue of the websocket on Angular not connecting to the Spring websocket until I allowed CORS on the Spring websocket.
Does anyone know why this is the case? I thought that since they are on the same server, they should work even without CORS.
Here's my code:
Angular:
onConnect(): Promise<any> {
return new Promise(resolve => {
console.log("Connecting...")
this.ws = new WebSocket(`wss://${window.location.host}/websocket`)
this.ws.onopen = this.onWebSocketOpen.bind(this)
this.ws.onmessage = this.onWebSocketMessage.bind(this)
this.ws.onclose = this.onWebSocketclose.bind(this)
this.ws.onerror = (error) => console.error(error)
resolve(this.ws)
})
}
Spring Boot:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Value("${webapp.host.url}")
private String hostUrl;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new WebSocketHandler(), "/websocket");
.setAllowedOrigins(hostUrl);
}
}
When CORS was not set, the Angular websocket connection failed with an close stats of 1006, reason ''. However, Postman is able to connect.