2

私がホストしている Dropwizard を、Google クラウド (GCE) で Web サイトと共に使用しています。これは、現在アクティブな場所が 2 つあることを意味します。

Some.IP.Address - UI Some.IP.Address:8080 - Dropwizard サーバー

UI がドロップウィザード サーバーから何かを呼び出そうとすると、クロスサイト オリジン エラーが発生しますが、これは理解できます。しかし、これは私にとって問題を引き起こしています。これを修正するにはどうすればよいですか? UI でリソースを完全に修飾する必要がないように、どうにかしてアドレスをスプーフィングできれば素晴らしいことです。

私がやろうとしているのはこれです:

$.get('/プロバイダ/アップロード/表示情報')

または、完全に資格を取得する必要がある場合

$.get(' http://Some.IP.Address:8080/provider/upload/display_information ')

この Google グループのスレッド ( https://groups.google.com/forum/#!topic/dropwizard-user/ybDOTOxjlLI )に従って Dropwizard で Origin Filters を設定しようとしましたが、うまくいかないようです。

4

1 に答える 1

2

http://Some.IP.Addressのサーバーによって提供される index.html には、次のような jQuery スクリプトがある場合があります。

$.get('http://Some.IP.Address:8080/provider/upload/display_information', data, callback);

もちろん、Same-Origin-Policy (SOP) により、ブラウザーはhttp://Some.IP.Address:8080へのアクセスを許可しません。プロトコル (http、https) とホスト、およびポートは同じである必要があります。

DropwizardでCross-Origin Resource Sharing (CORS) を実現するには、サーブレット環境に CrossOriginFilter を追加する必要があります。このフィルターは、サーバーが送信するすべての応答にいくつかの Access-Control-Headers を追加します。Dropwizard アプリケーションの run メソッドで、次のように記述します。

import org.eclipse.jetty.servlets.CrossOriginFilter;

public class SomeApplication extends Application<SomeConfiguration> {

    @Override
    public void run(TodoConfiguration config, Environment environment) throws Exception {
        FilterRegistration.Dynamic filter = environment.servlets().addFilter("CORS", CrossOriginFilter.class);
        filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
        filter.setInitParameter("allowedOrigins", "http://Some.IP.Address");    // allowed origins comma separated
        filter.setInitParameter("allowedHeaders", "Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin");
        filter.setInitParameter("allowedMethods", "GET,PUT,POST,DELETE,OPTIONS");
        filter.setInitParameter("preflightMaxAge", "5184000"); // 2 months
        filter.setInitParameter("allowCredentials", "true");

        // ...
    }

    // ...

}

このソリューションは Dropwizard 0.7.0 で機能し、https: //groups.google.com/d/msg/dropwizard-user/xl5dc_i8V24/gbspHyl4y5QJ で見つけることができます。

このフィルターは、すべての応答にいくつかの Access-Control-Headers を追加します。CrossOriginFilter の初期化パラメーターの詳細な説明については、http: //www.eclipse.org/jetty/documentation/current/cross-origin-filter.htmlを参照してください。

于 2014-04-16T16:20:45.733 に答える