クロスオリジンリソースシェアリング(CORS)とは– Java Jersey Webサーバーに追加する方法は?

公開: 2014-07-19

Crunchifyによるクロスオリジンリソースシェアリング(CORS)チュートリアル

client-server通信中にこのエラーを修正するにはどうすればよいですか? サーバーはJSONまたはXML形式でデータを送信し、クライアントは以下の例外をスローします。

通常のWebページはXMLHttpRequestオブジェクトを使用してリモートサーバーとデータを送受信できますが、同一生成元ポリシーによって制限されます。 拡張機能はそれほど制限されていません。 拡張機能は、最初にクロスオリジン権限を要求する限り、オリジン外のリモートサーバーと通信できます。

また、以下の質問がある場合は、正しい場所にいます。

  1. クロスオリジンリソースシェアリング(CORSフィルター)について
  2. クロスオリジンリソースシェアリングを使用できますか
  3. クロスオリジンリソースシェアリングを有効にする方法
  4. クロスオリジンリソースシェアリングを使用したクロスドメインAjaxとは
  5. HTTPアクセス制御(CORS)とは

CORS(Cross Origin Resource Sharing)は、Webブラウザでクロスオリジンリクエストを有効にするためにW3Cでサポートされているメカニズムです。 CORSが機能するには、ブラウザとサーバーの両方からのサポートが必要です。 これは、ApacheTomcatやその他の組み込みWebサーバーなどのWebコンテナー用のサーバー側CORSのJavaJerseyWebサーバーフィルター実装です。

CRunchifyCORSFilterジャージーサーバーの例

ステップ1:

応答には、リソースのコンテンツへのアクセスを許可するために、リクエストの発信元を値として持つAccess-Control-Allow-Originヘッダーを含めることができます。 ユーザーエージェントは、リクエストの発信元の値と発信元が一致することを検証します。

ステップ2:

ユーザーエージェントは、プリフライトリクエストを介して、クロスオリジンリソースが特定のオリジンからの非単純な方法を使用してリクエストを受け入れる準備ができているかどうかを検出できます。 これは、ユーザーエージェントによって再度検証されます。

ステップ-3:

サーバー側アプリケーションは、HTTPリクエストが、Originヘッダーを介して、ユーザーエージェントによってクロスオリジンリクエストと見なされたことを検出できます。 この拡張機能により、サーバー側のアプリケーションは、サービスを提供するクロスオリジンリクエストに制限を適用できます(たとえば、何も返さない)。

それでは、例から始めましょう。

例-1:Java JerseyWebサーバー

数週間前、Javaアプリケーションの起動中に組み込みHTTPジャージーサーバーを起動する方法に関する記事を書きました。 この投稿では、同じジャージーサーバーにCORSフィルターを追加する方法について説明します。

ContainerResponseFilterを拡張する必要があります。 コンテナー応答フィルターによって実装されるインターフェース。 デフォルトでは、つまり、フィルター実装クラスに名前バインディングが適用されていない場合、フィルターインスタンスはすべての発信応答にグローバルに適用されます。

これを修正するために、サーバーの応答に以下の4つのヘッダーを追加してみましょう。

  1. Access-Control-Allow-Origin
  2. Access-Control-Allow-Methods
  3. アクセス制御-最大年齢
  4. Access-Control-Allow-Headers

CORSフィルターコード:

前のチュートリアルからのJerseyEmbeddedHTTPServerCrunchify.javaの変更。

createHttpServer()に以下の行を追加して、サーバーを再起動します。

結果:

http:// localhost:8085 / api

CORSフィルターを使用した応答ヘッダーのクランチ化

ヘッダーの詳細は次のとおりです。

CORSフィルターなしで応答ヘッダーをクランチします

例2:ApacheHTTPサーバー

ヘッダーを公開するには、<Directory>、<Location>、<Files>セクション内、または.htaccessファイル内に次の行を追加します。

例-3:.NETサーバーはこれをweb.configで次のように構成できます

例-4:桟橋の場合(7以上)

jetty-servletsJARをWEB-INF / libに含め、これをWEB-INF /web.xmlにマージします

例-5:Apache Tomcatサーバー(v 7.0.41 +)

例-6:PHPの場合

ご不明な点がございましたら、お気軽にお問い合わせください。 すべてのJavaチュートリアルのリストはここにあります。