web-dev-qa-db-ja.com

HTTPS403を介したWebSocketは禁止されています

現在、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にアップグレードした場合の副作用のようです。依存関係のどれがエラーの原因であるかを特定したら、更新します。

9
Jake C.

これを試して:

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/simulation").setAllowedOrigins("*").withSockJS();
}

Originをすべてのソースに許可すると、クロスサイトリクエストフォージェリが発生する可能性があることに注意してください。それを防ぐ方法については、 https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF) を参照してください。

19
Harry Cho