我有一个通过SockJS使用Websockets的Spring boot1.5+ Angular5应用程序,最近被迫升级到Springboot2.2。
升级后,我的websocket会在一段随机的时间后关闭,或者在写入websocket时关闭。当使用Spring Boot1.5时,一切都工作得很好。
下面是Spring中的配置,使用spring-boot-starter-websocket版本:'2.2.4.RELEASE‘
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/api/socket")
.setAllowedOrigins("*")
.withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app")
.enableSimpleBroker("/nightly");
}
}我还添加了以下安全规则:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/socket/**")
.cors().and()
.headers().frameOptions().disable().and()
.csrf().disable()
.authorizeRequests()
.anyRequest().permitAll();
}客户端代码:
initWebSocket() {
const ws = new SockJS('/api/socket');
this.stompClient = Stomp.over(ws);
const that = this;
this.stompClient.connect({}, () => {
that.stompClient.subscribe('/nightly', (message) => {
this._rootStore.dispatch(new UpdateNightlyAction(message));
});
});
}当连接断开时,客户端将记录以下内容:
POST https://<url>/api/socket/231/i0rsgjlx/xhr?t=1600673163228 404
Whoops! Lost connection to https://<url>/api/socket我经历了Websockets在Spring Boot2中无法工作的不同情况,似乎没有任何帮助。在1.5中,它工作得很好。这里我漏掉了什么?
发布于 2021-04-16 11:27:40
由于springboot2.0^不允许cors参数allowedOrigins = "*“,您可以覆盖AllowedOriginPatterns等于"*”
boot1.5 ->
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
StompWebSocketEndpointRegistration registration = registry.addEndpoint("/webSocket");
registration.setAllowedOrigins("*");
registration.withSockJS();
}boot2.0^->
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
StompWebSocketEndpointRegistration registration = registry.addEndpoint("/webSocket");
// boot2.0^ AllowedOrigins = * is not allown
registration.setAllowedOriginPatterns("*");
registration.withSockJS();
}我和你有同样的错误,甚至搜索了很长时间,但是没有答案,所以我检查了调试日志,发现了这个问题,我用这种方法修复了它,它起作用了!
https://stackoverflow.com/questions/63988101
复制相似问题