2

私はジャージーサーバーを稼働させています。ブラウザから直接実行すると、正しい応答が得られます。ただし、angular.js の $resource から残りのサービスにアクセスしようとすると、正しい URL にアクセスしようとすると、コンソールに次のエラーが表示されます。http://simplapi.wordpress.com/2013/04/10/jersey-jax-rs-implements-a-cross-domain-filter/のようなすべての資料をオンラインで読んでCORSフィルターをセットアップしようとしましたが、ガイドは時代遅れで不可解なようです。(ジャージーの最新の実装を使用しています)。

リソースの読み込みに失敗しました: Origin localhost:63342 は Access-Control-Allow-Origin で許可されていません。

必要なデータをジャージで利用できるようにするメソッド。

  @Path("/id/{id}")
  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public boolean validateSSN(@PathParam("id") String id) {
      IdValidator idv = new IdValidator(id);
      return idv.Validate();
  }

angular.js のアクセサ メソッド:

services.factory('ReplyFactory', function ($resource) {
console.log("test");
return $resource(baseUrl + '/myproject/api/validate/id/:id', {id: '@id'},
    {'get': { method: 'GET' }});

});

4

1 に答える 1

1

必要なことは、リソースからのすべての応答に次の http ヘッダーがあることを確認することです。

  • Access-Control-Allow-Origin- どのオリジンからのリクエストを受け入れるかを指定します (あなたの場合は localhost:63342 )
  • Access-Control-Allow-Headers- CORS 経由で使用できるヘッダーを指定します
  • Access-Control-Allow-Methods- CORS 経由で使用できるメソッドを指定します

Access-Control-Allow-Credentialsそして、などのような他のヘッダーがあります。

したがって、応答に少なくともAccess-Control-Allow-Originヘッダーを追加するだけです。どのようにそれを行うことができるかは、環境によって異なります。

これらのヘッダーは、各リソースで手動で定義できます。

ジャージー フィルターを定義して、すべての応答に CORS ヘッダーを追加できます。

サーブレット フィルターを使用して、すべての応答に CORS ヘッダーを追加できます

TomcatJettyの特定のソリューションもあります

それを行う方法はたくさんありますが、すべて同じことです。サーバーの応答に追加のヘッダーを追加するだけです。

于 2013-10-10T13:07:40.983 に答える