0

別のバックエンド サーバー (Tomcat 7.0.26 を実行) で動作するように GWT アプリケーションを構成しようとしています。

この Web サイトの指示に従い、CORS フィルターを構成しました: http://software.dzhuvinov.com/cors-filter-installation.html

サンプルの GWT コード (Greetings アプリ) を次のように変更して使用しました。

  1. GWT アプリでは、RPC 呼び出しの前に次の行を追加しました。

    ((ServiceDefTarget) greetingService).setServiceEntryPoint("http://remoteserver/testcors/greet");
    
  2. web.xml を変更し、CORS フィルターを追加しました。

    <filter>
            <!-- The CORS filter with parameters -->
            <filter-name>CORS</filter-name>
            <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    
            <!-- Note: All parameters are options, if ommitted CORS Filter will fall 
                    back to the respective default values. -->
            <init-param>
                    <param-name>cors.allowGenericHttpRequests</param-name>
                    <param-value>true</param-value>
            </init-param>
    
            <init-param>
                    <param-name>cors.allowOrigin</param-name>
                    <param-value>*</param-value>
            </init-param>
    
            <init-param>
                    <param-name>cors.allowSubdomains</param-name>
                    <param-value>false</param-value>
            </init-param>
    
            <init-param>
                    <param-name>cors.supportedMethods</param-name>
                    <param-value>GET, HEAD, POST, OPTIONS</param-value>
            </init-param>
    
            <init-param>
                    <param-name>cors.supportedHeaders</param-name>
                    <param-value>Content-Type, X-Requested-With</param-value>
            </init-param>
    
            <init-param>
                    <param-name>cors.exposedHeaders</param-name>
                    <param-value>X-Test-1, X-Test-2</param-value>
            </init-param>
    
            <init-param>
                    <param-name>cors.supportsCredentials</param-name>
                    <param-value>true</param-value>
            </init-param>
    
            <init-param>
                    <param-name>cors.maxAge</param-name>
                    <param-value>3600</param-value>
            </init-param>
    
    </filter>
    
    <filter-mapping>
            <!-- CORS Filter mapping -->
            <filter-name>CORS</filter-name>
            <url-pattern>/testcors/greet</url-pattern>
    </filter-mapping>
    

"remoteserver" から TestCORS アプリにアクセスすると、すべて正常に動作し、これらのヘッダーが追加されていることがわかります。

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Access-Control-Allow-Origin: http://remoteserver
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: X-Test-2, X-Test-1
Content-Encoding: gzip
Content-Disposition: attachment
Content-Type: application/json;charset=utf-8
Content-Length: 214
Date: Sun, 24 Feb 2013 15:12:42 GMT

しかし、ローカル マシン (127.0.0.1:8888) で実行されている同じ TestCORS GWT アプリにアクセスすると、次のエラーが発生します。

リクエスト ヘッダー:

OPTIONS /testcors/greet HTTP/1.1
Host: remoteserver
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://127.0.0.1:8888
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17
Access-Control-Request-Headers: x-gwt-module-base, x-gwt-permutation, origin, content-type
Accept: */*
Referer: http://127.0.0.1:8888/TestCORS.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

応答ヘッダー:

HTTP/1.1 403 Forbidden
Server: Apache-Coyote/1.1
Content-Type: text/plain;charset=ISO-8859-1
Content-Length: 96
Date: Sun, 24 Feb 2013 15:14:38 GMT

このさまざまなブラウザー (Chrome バージョン 24.0.1312.57、Safari バージョン 6.0.2 (8536.26.17)、Firefox 18.0.2、Opera バージョン 12.14) を試してみましたが、サーバーから同じエラーが返されました - HTTP 403.

同様の問題を抱えている人はほとんどいませんでしたが、解決策を見つけることができませんでした。

どんな助けでも大歓迎です!

4

2 に答える 2

1

以前にこの cors-filter を使用したことがありません。このような最も単純なものを好みます。

とにかく、あなたの場合、gwt が機能するために必要なヘッダーを正しく構成していないようです。アプリは次を送信しています。

Access-Control-Request-Headers: x-gwt-module-base, x-gwt-permutation, origin, content-type

したがって、構成には次のものが必要です。

<init-param>
   <param-name>cors.supportedHeaders</param-name>
   <param-value>x-gwt-module-base, x-gwt-permutation, origin, content-type</param-value>
</init-param>
于 2013-02-25T07:52:48.737 に答える
0

ウラジミールのおかげで、このWebサイトからCORSフィルターも機能するようになりました: http ://software.dzhuvinov.com/cors-filter-installation.html

web.xmlにサポートされているヘッダーを追加しました。

<init-param>
    <param-name>cors.supportedHeaders</param-name>
    <param-value>Content-Type, X-Requested-With, x-gwt-module-base, x-gwt-permutation, origin, content-type</param-value>
</init-param>
于 2013-02-26T01:03:18.673 に答える