我目前正在尝试在我的 spring boot 1.2 应用程序中设置 HTTPS。此应用程序使用大量 websockets 在两个服务器之间进行通信。当它在简单的 HTTP 上运行时,一切正常,但是当我将它切换到 HTTPS 时,我在 Firefox 和 Chrome 上都收到 403 Forbidden 错误(尚未在 IE 上测试过。)我有一个接受所有连接的 SimpleCORSFilter 设置,所以我不要认为这是问题所在。通过 HTTPS 对同一服务器的所有 RESTful 请求都有效,它只是似乎被阻止的 websockets。
这是我的 WebSocket Spring 配置
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends
AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/simulation").withSockJS();
}
}
这是我的前端 websocket 连接
socket = new SockJS(https://my.url + '/simulation');
stompClient = Stomp.over(socket);
stompClient.debug = false;
stompClient.connect({}, function(frame) {
stompClient.subscribe('/topic/', function(status){
// Do something with result
});
});
编辑:这是 Chrome 控制台中的错误
GET https://localhost:8090/simulation/info 403 (Forbidden)
stomp.js:8 Whoops! Lost connection to undefined
编辑 2:这个错误似乎是最近从 spring boot 1.1 升级到 spring boot 1.2 的副作用。当我查明是哪个依赖项导致错误时,我会进行更新。
最佳答案
试试这个:
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/simulation").setAllowedOrigins("*").withSockJS();
}
请注意,允许所有来源的来源可能会造成跨站请求伪造。引用https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)寻找防御方法。
关于java - 通过 HTTPS 403 禁止的 Websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29677418/