4

cxf を使用して jax-rs レストフル サービスを作成し、scala サービス実装に注釈を付けて、cors ヘッダーを公開しました。

@Path("/foo/{date}")
@Produces(Array("application/xml"))
@CrossOriginResourceSharing(allowAllOrigins = true)
class Foo {
    @GET
    @Path("{id}")
    def doStuff(@PathParam("date") date: util.Date, @PathParam("id") id: Int) = ...
}

私のSpring applicationContext.xmlでは、jaxrs:providersリスト内にcorsフィルターを登録しました

<bean id="corsFilter" class="org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter"
        p:allowCredentials="true"/>

Firefox/IE 経由で直接エンドポイントを使用できますがhttp://localhost:8080/foo/2012-07-17/123、この 2 つを分離するために別の Web アプリケーションから呼び出されるサービスを構築しようとしています。

Firefox から直接リクエストを行うと、次のように表示されます。

Response Headers
Content-Length                  5699
Content-Type                    application/xml
Date                            Wed, 18 Jul 2012 16:49:09 GMT
Server                          Apache-Coyote/1.1

Request Headers
Accept                          text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding                 gzip, deflate
Accept-Language                 en-us,en;q=0.5
Cache-Control                   max-age=0
Connection                      keep-alive
Cookie                          DWRSESSIONID=Q62Vf$dv*S9sA8EaJm6jKW6$pyj; JSESSIONID=17E120C419F075B505447F151124BC18
Host                            localhost:9580
User-Agent                      Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1

そして、ローカル ディスク上の Web ページから Ajax 経由でリクエストを行うと、次のように表示されます。

Response Headers
Access-Control-Allow-Cred...    true
Access-Control-Allow-Orig...    *
Content-Length                  6177
Content-Type                    application/xml
Date                            Wed, 18 Jul 2012 16:41:21 GMT
Server                          Apache-Coyote/1.1

Request Headers
Accept                          */*
Accept-Encoding                 gzip, deflate
Accept-Language                 en-us,en;q=0.5
Connection                      keep-alive
Cookie                          DWRSESSIONID=Q62Vf$dv*S9sA8EaJm6jKW6$pyj; JSESSIONID=17E120C419F075B505447F151124BC18
Host                            localhost:8080
Origin                          null
User-Agent                      Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1

これは、 prototype.jsを使用して IE で正常に動作させることができますが、Firefox ではさらに複雑になります。これは、Web サービスが NTLM サーブレット フィルターによって投影されるためだと思います。xhrFields プロパティを使用して資格情報を渡すために、msie 以外のブラウザーにjQueryを使用してきました。IE と Firefox の両方からデバッガーでサービスが呼び出されていることを確認できますが、Firefox から呼び出されたときの応答は空白です。

これは可能ですか?

4

1 に答える 1

3

Access-Control-Allow-Origin: *Firefox はヘッダーを尊重していないようです-@CrossOriginResourceSharing注釈を変更して、エンドポイントにアクセスするホスト/ポートの組み合わせのリストを指定することで、問題が修正されました。

于 2012-07-19T16:35:49.710 に答える