現在、Spring Boot1.2アプリケーションでHTTPSをセットアップしようとしています。このアプリケーションは、2つのサーバー間で通信するために多くのWebSocketを使用します。単純なHTTPで実行している場合はすべて正常に機能しますが、HTTPSに切り替えると、FirefoxとChrome(IEでテストしていません)の両方で403Forbiddenエラーが発生します。すべての接続を受け入れるSimpleCORSFilterセットアップなので、それは問題ではないと思います。同じサーバーへのHTTPSを介したすべてのRESTfulリクエストは機能し、ブロックされているように見えるWebSocketだけです。
これが私のWebSocketSpring構成です
@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 Boot1.1からSpringBoot1.2にアップグレードした場合の副作用のようです。依存関係のどれがエラーの原因であるかを特定したら、更新します。
これを試して:
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/simulation").setAllowedOrigins("*").withSockJS();
}
Originをすべてのソースに許可すると、クロスサイトリクエストフォージェリが発生する可能性があることに注意してください。それを防ぐ方法については、 https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF) を参照してください。