ヘッダーをスキップ
Oracle® Fusion Middleware Jersey JAX-RS Reference Implementationの使用
11gリリース1 (10.3.6)
E64859-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
 

1 Jersey JAX-RS Reference Implementationの使用

このドキュメントでは、Oracle Fusion Middleware 11gとともにJersey JAX-RS Reference Implementation (RI)を使用する方法について説明します。内容は次のとおりです。

RESTアーキテクチャ・スタイルの概要

RESTとは、Simple Object Access Protocol (SOAP)のように追加のメッセージ層を使用することなく、HTTPなどの標準化されたインタフェースでデータを転送するためのシンプルなインタフェースを記述したものです。RESTはアーキテクチャ・スタイルであり、ツールキットではありません。リソースまたは特定の情報のソース(データおよび機能)として表示される、ステートレスなサービスを作成するための設計ルールのセットを提供します。各リソースは一意のURI (Uniform Resource Identifier)で識別されます。

クライアントはURI、標準化されたメソッドの固定セットを使用してリソースにアクセスし、リソースの表現が戻されます。リソースの表現は、一般的にリソースの現在または意図された状態を取得するドキュメントです。クライアントは、新しいリソース表現を受け取るたびに転送状態に設定されます。

表1-1に、アプリケーションがRESTfulだと見なされるために従う必要のある、RESTアーキテクチャ・スタイルにより定義された制約のセットを定義します。

表1-1 RESTアーキテクチャ・スタイルの制約

制約 説明

アドレス可能度

URI (Uniform Resource Identifier)を使用してすべてのリソースを識別します。英語では、URIは名詞と同じです。

共通インタフェース

HTTPメソッド(GET、POST、PUT、DELETE)などの共通インタフェースを使用して、リソースへのアクセスを可能にします。英語の類推を適用して、これらのメソッドは動詞と見なされ、名前付けされたリソースに適用できるアクションを説明します。

クライアント・サーバー・アーキテクチャ

クライアントとサーバーを、インタフェース要件とデータ・ストレージ要件とに分割します。このアーキテクチャは、サーバー・コンポーネントを簡略化することで、複数のプラットフォーム間でのユーザー・インタフェースの移植性と拡張性を高めます。

ステートレスな相互作用

ステートレスな通信プロトコルを使用します。通常はHypertext Transport Protocol (HTTP)です。すべてのリクエストは、特定のリクエストに必要なすべての情報を含む必要があります。セッション状態はクライアントにのみ保存されます。

この相互作用のスタイルにより、次のことが向上します。

  • 可視性—1つのリクエストでリクエストのすべての詳細が提供されます。

  • 信頼性—部分的な障害からの回復を容易にします。

  • 拡張性—状態を保存する必要がないので、サーバーは迅速にリソースを解放できます。

キャッシュ可能

クライアントのレスポンスのキャッシングを可能にします。レスポンスはキャッシュ可能かキャッシュ不可能かに識別される必要があります。キャッシングにより、一部の相互作用は必要なくなり、効率性、拡張性、および認識されるパフォーマンスが向上します。

階層化システム

クライアントがエンド・サーバーに直接接続するのではなく中間サーバーに接続できるようにします(クライアントは認識しません)。中間サーバーの使用は、ロード・バランシングと共有キャッシングを提供することで、システムの拡張性を向上させます。


RESTful Webサービスとは

RESTful Webサービスは、REST原則に従って構築され、それによりWebで適切に動作するように設計されたサービスです。

RESTful Webサービスは、表1-1に定義されたアーキテクチャ・スタイル制約に従います。通常、RESTful WebサービスはHTTPプロトコル上に構築され、GET、POST、PUT、DELETEなどの共通HTTPメソッドにマップされる操作を実装し、リソースをそれぞれ作成、取得、更新、削除します。

WebLogic ServerでのRESTful Webサービスの開発

WebLogic Serverには、Webアプリケーションとしてパッケージされ、Jersey JAX-RS RIに基づくアプリケーションの実行に必要な事前に作成された共有ライブラリが含まれています。次のバージョンがサポートされています。

  • Jersey JAX-RS RIバージョン1.9

  • Jersey JAX-RS RIバージョン1.1.5.1

次の項では、Jersey JAX-RS RI共有ライブラリとその使用手順、および新しいバージョンのJersey JAX-RS RIの登録方法について説明します。

Jersey JAX-RS RI共有ライブラリの要約

共有ライブラリは、WL_HOME/common/deployable-librariesディレクトリに格納されています。

表1-2に、Jersey JAX-RS RIバージョン1.9 Webサービスをサポートする事前作成共有ライブラリを示します。

表1-2 Jersey JAX-RS RI 1.9の共有ライブラリ

機能 説明
  • Jersey

  • JSON処理およびストリーミング

  • ATOM処理

  • 共有ライブラリ名: jersey-bundle

  • JARファイル名: jersey-bundle-1.9.jar

  • WARファイル名: jersey-bundle-1.9.war

  • バージョン1.9

  • ライセンス: SUN CDDL+GPL

JAX-RS API

  • 共有ライブラリ名: jsr311

  • JARファイル名: jsr311-api-1.1.1.jar

  • WARファイル名: jsr311-api-1.1.1.war

  • バージョン: 1.1.1

  • ライセンス: JSR311ライセンス


表1-3に、Jersey JAX-RS RIバージョン1.1.5.1 Webサービスをサポートする構築済共有ライブラリを、対応する機能ごとにまとめています。共有ライブラリが必須か省略可能かも示します。

表1-3 Jersey JAX-RS RI 1.1.5.1の共有ライブラリ

機能 説明 必須かどうか

Jersey

  • 共有ライブラリ名: jersey-bundle

  • JARファイル名: jersey-bundle-1.1.5.1.jar

  • WARファイル名: jersey-bundle-1.1.5.1.war

  • バージョン: 1.1.5.1

  • ライセンス: SUN CDDL+GPL

必須

JAX-RS API

  • 共有ライブラリ名: jsr311

  • JARファイル名: jsr311-api-1.1.1.jar

  • WARファイル名: jsr311-api-1.1.1.war

  • バージョン: 1.1.1

  • ライセンス: JSR311ライセンス

必須

JSON処理

  • 共有ライブラリ名: jackson-core-asl

  • JARファイル名: jackson-core-asl-1.1.1.jar

  • WARファイル名: jackson-core-asl-1.1.1.war

  • バージョン: 1.1.1

  • ライセンス: Apache 2.0

省略可能

JSON処理

  • 共有ライブラリ名: jackson-jaxrs

  • JARファイル名: jackson-jaxrs-1.1.1.jar

  • WARファイル名: jackson-jaxrs-1.1.1.war

  • バージョン: 1.1.1

  • ライセンス: Apache 2.0

省略可能

JSON処理

  • 共有ライブラリ名: jackson-mapper-asl

  • JARファイル名: jackson-mapper-asl-1.1.1.jar

  • WARファイル名: jackson-mapper-asl-1.1.1.war

  • バージョン: 1.1.1

  • ライセンス: Apache 2.0

省略可能

JSONストリーミング

  • 共有ライブラリ名: jettison

  • JARファイル名: jettison-1.1.jar

  • WARファイル名: jettison-1.1.war

  • バージョン: 1.1

  • ライセンス: Apache 2.0

省略可能

ATOM処理

  • 共有ライブラリ名: rome

  • JARファイル名: rome-1.0.jar

  • WARファイル名: rome-1.0.war

  • バージョン: 1.0

  • ライセンス: Apache 2.0

省略可能


また、次の表にWebLogic Serverで使用可能な依存JARを示します。これらは共有ライブラリとして登録する必要はありません。

表1-4 依存JAR (WebLogic Serverで使用可能)

機能 JARファイル名

ATOM処理のためのjdomバージョン1.0 API

com.bea.core.jdom_1.0.0.0_1-0.jar

JAXBバージョン2.1.1 API

javax.xml.bind_2.1.1.jar

Servletバージョン2.5 API

Javax.servlet_1.0.0.0_2-5.jar


Jersey JAX-RS RI共有ライブラリの使用手順

Jersey JAX-RS RIを使用するには、次の手順を実行します:

  1. Jersey JAX-RS RI共有ライブラリを1つ以上のWebLogic Serverインスタンスに登録します。「WebLogic ServerインスタンスへのJersey JAX-RS RI共有ライブラリの登録」を参照してください。

  2. Jersey JAX-RS RI共有ライブラリを使用するように、RESTfulなWebサービスを含むWebアプリケーションを構成します。「Jersey JAX-RS RIを使用するWebアプリケーションの構成」を参照してください。

  3. JAX-RS Webサービスおよびクライアントを作成します。「RESTful Webサービスおよびクライアントの作成」を参照してください。

  4. オプションで、Oracle Web Services Manager (Oracle WSM)ポリシーを使用してJerseyサーブレット・アプリケーションまたはRESTful Webサービス・クライアントを保護します。詳細な情報は、次を参照してください:

必要に応じて、さらに新しいバージョンのJersey JAX-RS RI共有ライブラリを構築してデプロイできます。「新しいバージョンのJersey JAX-RS RIの登録」を参照してください。

Jersey JAX-RS RIの詳細やRESTfulなWebサービスの開発例は、https://jersey.java.netを参照してください。

WebLogic ServerインスタンスへのJersey JAX-RS RI共有ライブラリの登録

共有Java EEライブラリを1つ以上のWebLogic Serverインスタンスに登録するには、ライブラリをターゲットのサーバーにデプロイして、そのデプロイメントを共有することを指示します。共有Java EEライブラリは、ライブラリを参照するアプリケーションをデプロイするのと同じWebLogic Serverインスタンスにターゲット指定する必要があります。

参照側アプリケーションがデプロイされると、WebLogic Serverは共有ライブラリ・ファイルをそのアプリケーションにマージします。必須ライブラリが登録されていないサーバー・インスタンスに参照側アプリケーションをデプロイしようとすると、参照側アプリケーションのデプロイが失敗します。

アプリケーションで必要な機能および使用するJersey JAX-RS RIのバージョンに基づいて、「Jersey JAX-RS RI共有ライブラリの要約」で定義されている1つ以上のJersey JAX-RS共有ライブラリを次のように登録できます。

  1. Jersey JAX-RS RIのバージョン1.9または1.1.5.1のうち、使用するバージョンを選択します。選択したバージョンに基づいて、表1-2または表1-3のいずれかを参照し、アプリケーションで必要な共有ライブラリを決定します。

  2. 共有ライブラリを登録するWebLogic Serverターゲットを決定します。共有ライブラリは、参照側アプリケーションをデプロイするのと同じWebLogic Serverインスタンスに登録する必要があります(後で必要に応じて参照側アプリケーションをデプロイできるように、ドメイン内のすべてのサーバーにライブラリをデプロイしてもかまいません)。

  3. 共有ライブラリ・ファイルを手順2で決定したターゲット・サーバーにデプロイし、-libraryオプションを使用してデプロイメントをライブラリとして指定することで、共有ライブラリを登録します。

    Jersey JAX-RS RIバージョン1.9機能およびJAX-RS APIをサポートする共有ライブラリをデプロイする方法の例を次に示します。

    weblogic.Deployer -verbose -noexit -source C:\myinstall\wlserver_10.3\common\deployable-libraries\jersey-bundle-1.9.war -targets myserver -adminurl t3://localhost:7001 -user system -password ******** -deploy -library
    
    weblogic.Deployer -verbose -noexit -source C:\myinstall\wlserver_10.3\common\deployable-libraries\jsr311-api-1.1.1.war -targets myserver -adminurl t3://localhost:7001 -user system -password ******** -deploy -library
    

    JAX-RS RIバージョン1.1.5.1を使用する場合の、Jersey JAX-RS RIの基本機能とJAX-RS APIをサポートする共有ライブラリのデプロイ方法を次の例に示します。

    weblogic.Deployer -verbose -noexit -source C:\myinstall\wlserver_10.3\common\deployable-libraries\jersey-bundle-1.1.5.1.war -targets myserver -adminurl t3://localhost:7001 -user system -password ******** -deploy -library
    
    weblogic.Deployer -verbose -noexit -source C:\myinstall\wlserver_10.3\common\deployable-libraries\jsr311-api-1.1.1.war -targets myserver -adminurl t3://localhost:7001 -user system -password ******** -deploy -library
    

    weblogic.Deployerの詳細は、「Oracle WebLogic Serverへのアプリケーションのデプロイ」のweblogic.Deployerコマンドライン・リファレンスに関する項を参照してください。

Jersey JAX-RS RIを使用するWebアプリケーションの構成

Jersey共有ライブラリを使用するように、RESTfulなWebサービスを含むWebアプリケーションを構成する必要があります。特に、アプリケーションに関連付けられている次の2つのデプロイメント記述子ファイルを更新する必要があります。

WebリクエストをJerseyサーブレットに委任するためのweb.xmlの更新

すべてのWebリクエストをJerseyサーブレットcom.sun.jersey.spi.container.servlet.ServletContainerに委任するように、web.xmlファイルを更新します。web.xmlファイルは、アプリケーション・アーカイブのルート・ディレクトリのWEB-INFディレクトリにあります。

次に、web.xmlファイルの更新例を示します。

<web-app>
    <servlet>
        <display-name>My Jersey Application</display-name>
        <servlet-name>MyJerseyApp</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>myPackage.myJerseyApplication</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyJerseyApp</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

前述の例に示したように、次の要素を定義する必要があります。

  • <servlet-class>要素は、Jersey JAX-RS RIへのエントリ・ポイントであるサーブレットを定義します。この値は、常にcom.sun.jersey.spi.container.servlet.ServletContainerに設定する必要があります。

  • <init-param>要素は、「アプリケーション・サブクラス」で説明しているように、javax.ws.rs.core.Applicationを拡張するクラスを定義します。

  • <servlet-mapping>要素は、MyJerseyAppサーブレットにマップされる基本URLパターンを定義します。URLのhttp://<host>:<port>よりも後の部分に<webAppName>を付加したものが、WebLogic Serverによって<url-pattern>と比較されます。パターンが一致すれば、この要素でマップされているサーブレットが呼び出されます。

web.xmlデプロイメント・ディスクリプタの詳細は、Oracle WebLogic Server用のWebアプリケーション、サーブレットおよびJSPの開発のweb.xmlデプロイメント・ディスクリプタの要素に関する項を参照してください。

共有ライブラリを参照するためのweblogic.xmlの更新

アプリケーションで必要な共有ライブラリを参照するようにweblogic.xmlファイルを更新します。weblogic.xmlファイルは、アプリケーション・アーカイブのルート・ディレクトリのWEB-INFディレクトリにあります。

<exact-match>ディレクティブを使用すると、デプロイされた共有ライブラリの最新バージョンが使用されるかどうかを制御できます。trueに設定すると、新しいバージョンがWebLogic Serverにデプロイされているかどうかに関係なく、weblogic.xmlに指定されたバージョンが使用されます。falseに設定すると、weblogic.xmlファイルでの指定内容にかかわらず、WebLogic Serverにデプロイされている最新バージョンが使用されます。

たとえば、<exact-match>ディレクティブをfalseに設定し、「新しいバージョンのJersey JAX-RS RIの登録」の説明に従い、より新しいバージョンのJerseyソフトウェアを共有ライブラリとして登録すると、アプリケーションでは新しい方の共有ライブラリが自動的に使用されます。このケースでは、最新バージョンを使用するためにweblogic.xmlファイルを編集する必要はありません。

次の例は、JAX-RS RIバージョン1.9を使用するためにweblogic.xmlファイルを更新する方法を示しています。

<library-ref>
    <library-name>jax-rs</library-name>
    <specification-version>1.1</specification-version>
    <implementation-version>1.9</implementation-version>
    <exact-match>false</exact-match>
</library-ref>

次の例は、JAX-RS RIバージョン1.1.5.1を使用するためにweblogic.xmlファイルを更新する方法を示しています。すべての共有ライブラリ参照は、すべてのWebアプリケーションに必要なわけではありません。ただし、jersey-bundleおよびjsr311共有ライブラリは共にJersey JAX-RS RIを使用する必要があります。この例では、<exact-match>はfalseに設定され、WebLogic Serverにデプロイされた共有ライブラリの最新バージョンが使用されるように指定します。

<library-ref>
    <library-name>jersey-bundle</library-name>
    <specification-version>1.1.1</specification-version>
    <implementation-version>1.1.5.1</implementation-version>
    <exact-match>false</exact-match>
</library-ref>
<library-ref>
    <library-name>jsr311</library-name>
    <specification-version>1.1.1</specification-version>
    <implementation-version>1.1.1</implementation-version>
    <exact-match>false</exact-match>
</library-ref>
<library-ref>
    <library-name>jackson-core-asl</library-name>
    <specification-version>1.0</specification-version>
    <implementation-version>1.1.1</implementation-version>
    <exact-match>false</exact-match>
</library-ref>
<library-ref>
    <library-name>jettison</library-name>
    <specification-version>1.1</specification-version>
    <implementation-version>1.1</implementation-version>
    <exact-match>false</exact-match>
</library-ref>
<library-ref>
    <library-name>rome</library-name>
    <specification-version>1.0</specification-version>
    <implementation-version>1.0</implementation-version>
    <exact-match>false</exact-match>
</library-ref>

weblogic.xmlデプロイメント記述子の詳細は、Oracle WebLogic ServerのためのWebアプリケーション、サーブレットおよびJSPの開発のweblogic.xmlデプロイメント記述子の要素に関する項を参照してください。

RESTful Webサービスおよびクライアントの作成

Jersey JAX-RS RIを登録し、Webアプリケーションを構成してから、デプロイメントに必要なRESTful Webサービスおよびクライアント、そしてアプリケーション・サブクラスを作成できます。次に、単純なWebサービスとクライアントを示します。

単純なRESTful Webサービス

次に、RESTfulなWebサービスの非常に単純な例を示します。

package samples.helloworld;
 
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
 
// Specifies the path to the RESTful service
@Path("/helloworld")
public class helloWorld {
 
   // Specifies that the method processes HTTP GET requests 
   @GET
   @Path("sayHello")  
   @Produces("text/plain")
   public String sayHello() {
      return "Hello World!";
   }
}

単純なRESTfulクライアント

次に、事前に定義されたRESTful Webサービスを呼び出す簡単なRESTfulクライアントを示します。このサンプルでは、Jersey JAX-RS RIによって具体的に提供されるクラスを使用します。このクラスはJAX-RS規格の一部ではありません。

package samples.helloworld.client;
 
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
 
public class helloWorldClient {
   public helloWorldClient() {
      super();
   }
 
   public static void main(String[] args) {
      Client c = Client.create();
      WebResource resource = c.resource("http://localhost:7101/RESTfulService-Project1-context-root/jersey/helloWorld");
      String response = resource.get(String.class);
   }
}

アプリケーション・サブクラス

次の例では、RESTful Webサービスのアプリケーション・デプロイメントのコンポーネントを定義するためにjavax.ws.rs.core.Applicationを拡張し、追加のメタデータを提供するクラスの作成方法を説明します。javax.ws.rs.core.Applicationの詳細は、https://jersey.java.net/apidocs/1.9/jersey/javax/ws/rs/core/Application.htmlでJavadocを参照してください。

Applicationサブクラス内で、必要に応じて、getClasses()およびgetSingletons()メソッドをオーバーライドし、RESTful Webサービス・リソースのリストを戻します。リソースはそれを戻すApplicationサブクラスにバインドされます。

両方のメソッドが同じリソースを戻す場合、エラーが戻されることに注意してください。

javax.ws.rs.ApplicationPathアノテーションを使用して、サーブレットにマップされる基底URIパターンを定義します。@ApplicationPath注釈の詳細は、https://jersey.java.net/apidocs/1.9/jersey/javax/ws/rs/core/Application.htmlでJavadocを参照してください。

javax.ws.rs.core.Applicationを拡張し、@ApplicationPathアノテーションを使用してリソースの基底URIを定義するクラスの例を次に示します。

import javax.ws.rs.core.Application;
javax.ws.rs.ApplicationPath;
...
@ApplicationPath("resources")
public class MyApplication extends Application {
    public Set<java.lang.Class<?>> getClasses() {
        Set<java.lang.Class<?>> s = new HashSet<Class<?>>();
        s.add(HelloWorldResource.class);
        return s;
    }
}

Jerseyサーブレット・アプリケーションの保護

Jerseyサーブレット・アプリケーションを保護するために、次のOracle WSMポリシーのうちの1つ以上をアタッチできます。これらのポリシーに関する詳細情報およびポリシーを手動で構成する方法は、『Webサービスのためのセキュリティおよび管理者ガイド』の事前定義済ポリシーに関する項を参照してください。

認証ポリシー

  • oracle/wss_http_token_service_policy

  • oracle/http_basic_auth_over_ssl_service_policy

  • oracle/http_jwt_token_service_policy

  • oracle/http_jwt_token_over_ssl_service_policy

  • oracle/http_oam_token_service_policy

  • oracle/http_saml20_token_bearer_service_policy

  • oracle/http_saml20_token_bearer_over_ssl_service_policy

  • oracle/multi_token_rest_service_policy (1つのみのポリシー)

  • oracle/multi_token_over_ssl_rest_service_policy (1つのみのポリシー)


注意:

oracle/http_spnego_token_service_templateアサーション・テンプレートを使用して作成する、SPNEGOトークン・ポリシーを添付することもできます。詳細は、『Webサービスのためのセキュリティおよび管理者ガイド』のSPNEGO Negotiationを使用したKerberosの構成方法に関する項を参照してください。

認可ポリシー

  • oracle/binding_authorization_denyall_policy

  • oracle/binding_authorization_permitall_policy

  • oracle/binding_permission_authorization_policy

Oracle WSMポリシーを使用してJerseyサーブレット・アプリケーションを保護するには、web.xmlファイルを更新します。詳細手順は、Webサービスのためのセキュリティおよび管理者ガイドのサーブレット・アプリケーションへのポリシーのアタッチに関する項を参照してください。

次に、web.xmlファイルの更新例を示します。

例1-1 ポリシーをJerseyサーブレット・アプリケーションにアタッチするために更新するweb.xmlファイルの例

<?xml version = '1.0' encoding = 'windows-1252'?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">
   <filter>
      <filter-name>OWSM Security Filter</filter-name>
      <filter-class>oracle.wsm.agent.handler.servlet.SecurityFilter</filter-class>
      <init-param>
         <param-name>servlet-name</param-name>
         <param-value>MyJerseyApp</param-value>
      </init-param>
      <init-param>
         <param-name>oracle.wsm.metadata.policySet</param-name>
         <param-value><![CDATA[<sca11:policySet name="policySet" 
               appliesTo="REST-Resource()" 
               attachTo="Service('*')" 
               xmlns:sca11="http://docs.oasis-open.org/ns/opencsa/sca/200903" 
               xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy" 
               xmlns:wsp15="http://www.w3.org/ns/ws-policy">
               <wsp15:PolicyReference 
                  URI="oracle/multi_token_rest_service_policy"
                  orawsp:category="security" orawsp:status="enabled"> 
               </wsp15:PolicyReference>
               <wsp15:PolicyReference 
                  URI="oracle/binding_authorization_permitall_policy" 
                  orawsp:category="security" orawsp:status="enabled"> 
               </wsp15:PolicyReference>
            </sca11:policySet>]]>
         </param-value>
      </init-param>
   </filter>
   <filter-mapping>
      <filter-name>OWSM Security Filter</filter-name>
      <servlet-name>MyJerseyApp</servlet-name>
   </filter-mapping>
    <servlet>
        <display-name>My Jersey Application</display-name>
        <servlet-name>MyJerseyApp</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>myPackage.myJerseyApplication</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyJerseyApp</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

RESTful Webサービス・クライアントの保護

RESTful Webサービス・クライアントを保護するために、次のOracle WSMポリシーのうちの1つ以上をアタッチできます。これらのポリシーに関する詳細情報およびポリシーを手動で構成する方法は、『Webサービスのためのセキュリティおよび管理者ガイド』の事前定義済ポリシーに関する項を参照してください。

認証ポリシー

  • oracle/wss_http_token_client_policy

  • oracle/http_basic_auth_over_ssl_client_policy

  • oracle/http_jwt_token_client_policy

  • oracle/http_jwt_token_over_ssl_client_policy

  • oracle/http_saml20_token_bearer_client_policy

  • oracle/http_saml20_token_bearer_over_ssl_client_policy


注意:

oracle/http_spnego_token_client_templateアサーション・テンプレートを使用して作成する、SPNEGOトークン・ポリシーをアタッチすることもできます。詳細は、『Webサービスのためのセキュリティおよび管理者ガイド』のSPNEGO Negotiationを使用したKerberosの構成方法に関する項を参照してください。

Oracle WSMポリシーを使用してRESTful Webサービスを保護するには:

  1. 「Oracle WSM RESTfulクライアント・フィルタで必要な共有ライブラリのWebLogic Serverインスタンスへの登録」の説明に従って、Oracle WSM RESTfulクライアント・フィルタで必要とされる共有ライブラリをWebLogic Serverインスタンスに登録します。

  2. 「Oracle WSM RESTfulクライアント・フィルタを使用するWebアプリケーションの構成」の説明に従って、Oracle WSM RESTfulクライアント・フィルタで必要とされる共有ライブラリを参照するようにweblogic.xmlデプロイメント記述子を更新します。

  3. 次のいずれかの方法を使用して、Oracle WSMポリシーをRESTful Webサービス・クライアントにアタッチします。

    • 「機能クラスを使用したRESTful Webサービス・クライアントへのポリシーのアタッチ」の説明に従い、機能クラスを使用して直接アタッチします。

    • Webサービスのためのセキュリティおよび管理者ガイドのポリシー・セットの作成および管理に関する項の説明に従って、rest-clientリソース・タイプを使用してグローバルにアタッチします。次に例を示します。

      C:\Oracle\Middleware\oracle_common\common\bin> wlst.cmd
      ...
      wls:/offline> connect("weblogic","password","t3://myAdminServer.example.com:7001")
      Connecting to t3://myAdminServer.example.com:7001" with userid weblogic ...
      Successfully connected to Admin Server "AdminServer" that belongs to domain "my_domain".
       
      Warning: An insecure protocol was used to connect to the 
      server. To ensure on-the-wire security, the SSL port or 
      Admin port should be used instead.
       
      wls:/my_domain/serverConfig> beginRepositorySession()
       
      Session started for modification.
      
      wls:/my_domain/serverConfig> createPolicySet('myPolicySet','rest-client', 'Domain("*")')
      
      Description defaulted to "Global policy attachments for REST clients." 
      The policy set was created successfully in the session.
      
      wls:/my_domain/serverConfig> attachPolicySetPolicy('oracle/wss_http_token_client_policy')
      
      Policy reference "oracle/wss_http_token_service_policy" added.
      
      wls:/my_domain/serverConfig> commitRepositorySession()
      
      The policy set myPolicySet is valid. 
      Creating policy set myPolicySet in repository.
      
      Session committed successfully.
      

Oracle WSM RESTfulクライアント・フィルタの使用中に問題が発生した場合は、Webサービスのためのセキュリティおよび管理者ガイドのOracle WSM RESTfulクライアント・フィルタでの問題の診断に関する項を参照してください。

Oracle WSM RESTfulクライアント・フィルタで必要な共有ライブラリのWebLogic Serverインスタンスへの登録


注意:

「WebLogic ServerインスタンスへのJersey JAX-RS RI共有ライブラリの登録」の説明に従って、Jersey JAX-RS RI共有ライブラリも登録する必要があります。

(Jersey JAX-RS RI共有ライブラリのほかに)Oracle WSM RESTfulクライアント・フィルタで必要な共有ライブラリには、次のようなものがあります。

  • MW_HOME/oracle_common/modules/oracle.wsm.common_11.1.1/wsm-rest-lib.war

  • MW_HOME/oracle_common/modules/oracle.webservices_11.1.1/wls-rest-client.war

Java EE RESTfulクライアントの場合、Oracle WSM RESTfulクライアント・フィルタで必要な共有ライブラリをWebLogic Serverインスタンスに登録するには:

  1. 共有ライブラリを登録するWebLogic Serverターゲットを決定します。共有ライブラリは、参照側アプリケーションをデプロイするのと同じWebLogic Serverインスタンスに登録する必要があります。(後で必要に応じて参照側アプリケーションをデプロイできるように、ドメイン内のすべてのサーバーにライブラリをデプロイしてもかまいません)。

  2. 共有ライブラリ・ファイルを手順1で決定したターゲット・サーバーにデプロイし、-libraryオプションを使用してデプロイメントをライブラリとして指定することで、共有ライブラリを登録します。

    次に例を示します。

    weblogic.Deployer -verbose -noexit -source C:\myinstall\oracle_common\modules\oracle.wsm.common_11.1.1\wsm-rest-lib.war -targets myserver -adminurl t3://localhost:7001 -user system -password ******** -deploy -library
    
    weblogic.Deployer -verbose -noexit -source C:\myinstall\oracle_common\modules\oracle.webservices_11.1.1\wls-rest-client.war -targets myserver -adminurl t3://localhost:7001 -user system -password ******** -deploy -library
    

Java SE RESTfulクライアントの場合、Oracle WSM RESTfulクライアント・フィルタで必要な共有ライブラリをWebLogic Serverインスタンスに登録するには、共有ライブラリをクラスパスに追加する必要があります。

Oracle WSM RESTfulクライアント・フィルタを使用するWebアプリケーションの構成


注意:

さらに、「Jersey JAX-RS RIを使用するWebアプリケーションの構成」の説明に従って、Jersey JAX-RS RIを使用するようにWebアプリケーションを構成する必要があります。

Oracle WSM RESTfulクライアント・フィルタで必要な共有ライブラリを参照するようにweblogic.xmlファイルを更新します。weblogic.xmlファイルは、アプリケーション・アーカイブのルート・ディレクトリのWEB-INFディレクトリにあります。

次の例は、Oracle WSM RESTfulクライアント・フィルタを使用するようにweblogic.xmlファイルを更新する方法を示しています。


注意:

次の例では、Jersey JAX-RS RIバージョン1.9共有ライブラリを使用するようにWebアプリケーションを構成しています。Jersey JAX-RS RIバージョンの構成の詳細は、「Jersey JAX-RS RIを使用するWebアプリケーションの構成」を参照してください。

<?xml version = '1.0' encoding = 'windows-1252'?>
<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app 
http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd" 
xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
...
<library-ref>
    <library-name>jax-rs</library-name>
    <specification-version>1.1</specification-version>
    <implementation-version>1.9</implementation-version>
    <exact-match>false</exact-match>
</library-ref>
<library-ref>
    <library-name>wsm-rest-lib</library-name>
    <exact-match>false</exact-match>
</library-ref>
<library-ref>
    <library-name>wls-rest-client</library-name>
    <specification-version>1.1</specification-version>
    <implementation-version>1.1.0.0</implementation-version>
    <exact-match>false</exact-match>
</library-ref>
...
</weblogic-web-app>

weblogic.xmlデプロイメント記述子の詳細は、Oracle WebLogic ServerのためのWebアプリケーション、サーブレットおよびJSPの開発のweblogic.xmlデプロイメント記述子の要素に関する項を参照してください。

機能クラスを使用したRESTful Webサービス・クライアントへのポリシーのアタッチ

表1-5で定義している機能クラスを使用して、プログラムによってRESTful Webサービス・クライアントにOracle WSMセキュリティ・ポリシーをアタッチできます。クラスはoracle.wsm.metadata.featureパッケージで提供されます。

表1-5 RESTfulクライアントへのポリシーのアタッチに使用される機能クラス

機能クラス 説明

AbstractPolicyFeature

ポリシー・サブジェクトの機能クラスのためのベース抽象クラス。

PolicySetFeature

ポリシー・サブジェクトにアタッチするためのポリシー参照と構成オーバーライド・プロパティのセット。

PolicyReferenceFeature

ポリシー・サブジェクトにアタッチするための単一のポリシー参照。

PropertyFeature

1つ以上のポリシーの構成のオーバーライドに使用できるオプションのプロパティ。


RESTfulクライアント・インスタンスを作成するときにcom.sun.jersey.api.client.config.ClientConfigを定義してcom.sun.jersey.api.client.Clientクラスのcreateメソッドに情報を渡すことにより、必要に応じてクライアント構成プロパティを渡すことができます。

次の例に示すように、ClientConfigを使用して、Oracle WSMポリシーをアタッチして構成プロパティをオーバーライドできます。

次のコードは、OAuth 2.0ポリシーをRESTfulクライアントにアタッチし、機能クラスを使用して構成プロパティをオーバーライドします。

例1-2 機能クラスを使用したRESTful Webサービス・クライアントへのポリシーのアタッチ

package sample.restclient;
import java.io.IOException;
import java.io.PrintWriter;
 
import weblogic.jaxrs.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
 
import javax.servlet.*;
import javax.servlet.http.*;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
 
import oracle.wsm.metadata.feature.AbstractPolicyFeature;
import oracle.wsm.metadata.feature.PolicyReferenceFeature;
import oracle.wsm.metadata.feature.PolicySetFeature;
import oracle.wsm.metadata.feature.PropertyFeature;
 
public class BankingServlet extends HttpServlet {
    private static final String CONTENT_TYPE = "text/html; charset=UTF-8";
    private static final String OAUTH_TOKEN_ENDPOINT = "http://example.com:1234/ms_oauth/oauth2/endpoints/oauthservice/tokens";
    private static final String RESOURCE_SERVER_ADDRESS = "http://example.com:1234";
    private static final String ACCOUNT_RESOURCE = RESOURCE_SERVER_ADDRESS + "/banking_owsm/account/balance";    
    private static final String CLIENT_CSF_KEY = "bankingweb.csf.key";
    private static final String OAUTH_RESOURCE_SCOPE = "AccountResource.balance.read";
    
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        PrintWriter out = response.getWriter();
        response.setContentType(CONTENT_TYPE);
        
        String userName = request.getRemoteUser();
                
        out.println("<html>");
        out.println("<head><title>The OAuth Bank</title></head>");
        out.println("<body>");
        out.println("<p>Hello " + userName + ", welcome to the OAuth Bank</p>");
        
        ClientConfig cc = new DefaultClientConfig();
        
// Setting the token.uri. This is used by the Oracle WSM client agent 
// when submitting requests for the authorization code.
        PropertyFeature oAuthConfigPropFeature = new PropertyFeature("token.uri",OAUTH_TOKEN_ENDPOINT);
        PropertyFeature[] oAuthClientPropFeatures = new PropertyFeature[2];
        
// Setting oauth2.client.csf.key and scope.
// The key pointed to by oauth2.client.csf.key must be available in the 
// OPSS credential store as a password credential, holding the 
// client id/client secret pair identifying the client.
// scope is the resource scope for which the requested access token is valid.
        oAuthClientPropFeatures[0] = new PropertyFeature("oauth2.client.csf.key", CLIENT_CSF_KEY);
        oAuthClientPropFeatures[1] = new PropertyFeature("scope",OAUTH_RESOURCE_SCOPE);
        
        PolicyReferenceFeature[] policyFeatures = new PolicyReferenceFeature[2];
        policyFeatures[0] = new PolicyReferenceFeature("oracle/oauth2_config_client_policy", oAuthConfigPropFeature);
        policyFeatures[1] = new PolicyReferenceFeature("oracle/http_oauth2_token_client_policy", oAuthClientPropFeatures);
        
        // Attaching policies.
        cc.getProperties().put(AbstractPolicyFeature.ABSTRACT_POLICY_FEATURE, new PolicySetFeature(policyFeatures));
 
        Client client = Client.create(cc);
        WebResource webResource = client.resource(ACCOUNT_RESOURCE);
        ClientResponse result = webResource.accept("application/json").get(ClientResponse.class);
        
        if (result.getStatus() == 200) {
        
            String body = result.getEntity(String.class);
            
            final JSONObject obj = (JSONObject)JSONValue.parse(body);
            
 
            if (obj != null && obj.get("balance") != null) {
                String balance = obj.get("balance").toString();
                out.println ("<p>Account balance: " + balance);
            }
            else {
                out.println("<p>Error while retrieving account balance.");
            }
        }
        
        else {
            out.println("<p>Error retrieving account balance: HTTP response status: " + result.getStatus());
        }
 
        out.println("</body></html>");
        
        out.close();
    } 
}

新しいバージョンのJersey JAX-RS RIの登録

WebLogic Serverで提供されるバージョンよりも新しいJersey JAX-RS RI共有ライブラリを使用する場合、次の手順を実行する必要があります。

  1. 関連するJersey JARファイルの必要なバージョンをJersey Webサイト(http://jersey.java.net)からダウンロードします。

  2. 手順1でダウンロードしたJARファイルを拡張し、Oracle WebLogic Serverのためのアプリケーションの開発の共有Java EEライブラリの作成に関する項の手順を実行して、新しい共有ライブラリを作成します。

  3. 共有ライブラリ・ファイルを手順2で決定したターゲット・サーバーにデプロイし、-libraryオプションを使用してデプロイメントをライブラリとして指定することで、共有ライブラリを登録します。次の手順を実行する必要があります。

    • -name引数に、表1-3に定義されている標準Jersey JAX-RS RI共有ライブラリ名を設定します。たとえば、jersey-bundleと設定します。

    • 異なる共有ライブラリのバージョンを区別するために、-libSpecVer引数と-libImplVer引数を設定します。

    最新バージョンのJersey JAX-RS RI機能をデプロイする方法の例を次に示します。weblogic.Deployerの詳細は、「Oracle WebLogic Serverへのアプリケーションのデプロイ」のweblogic.Deployerコマンドライン・リファレンスに関する項を参照してください。

    weblogic.Deployer -verbose -noexit -name jersey-bundle -source C:\myinstall\wlserver_10.3\common\deployable-libraries\jersey-bundle-1.2.war -targets myserver -adminurl t3://localhost:7001 -user system -password ******** -deploy -library -libspecver 1.2 -libimplver 1.2
    
  4. Webアプリケーションを再構成する必要があるかどうかを判別します。

    「Jersey JAX-RS RIを使用するWebアプリケーションの構成」の説明に従って、Webアプリケーションを構成するときにweblogic.xmlファイルで<exact-match>ディレクティブをfalseに設定すると、最新の指定バージョンの共有ライブラリが使用され、Webアプリケーションの構成を更新する必要はありません。

    <exact-match>ディレクティブをtrueに設定する場合、つまり最新バージョンではないJersey JAX-RS RIを使用したい場合は、該当する共有ライブラリを参照するようにweblogic.xmlを更新する必要があります。詳細は、「Jersey JAX-RS RIを使用するWebアプリケーションの構成」を参照してください。

  5. 新たに登録したバージョンのJersey JAX-RS共有ライブラリを使用する必要があるアプリケーションを再デプロイします。