JAX-RS

JAX-RS Webサービスは、LiferayモジュールでもLiferay以外で動作する場合と同じように動作します。唯一の違いは、OSGiフレームワークにクラスを登録する必要があることです。この作業を簡単にするために、Liferayの開発ツールではテンプレートを提供しています。

Liferay Developer Studioで、以下の手順に従ってrestテンプレートを使用した新しいモジュールを作成します。

  1. [ファイル][新規] → *[Liferay Module Project]*をクリックします。

  2. プロジェクトに名前を付けて、restテンプレートを選択します。

  3. *[次へ]*を選択し、サービスのクラス名とパッケージ名を入力します。

  4. そして、*[完了]*をクリックします。

代わりに、Blade CLIを使用してプロジェクトを作成することもできます。

作成されるクラスには、動作しているJAX-RS Webサービスが含まれており、デプロイしてすぐに使用することができます。

この記事では、JAX-RSホワイトボード全体を網羅することはしませんが、基本的には@Componentアノテーションの設定プロパティを除いて、JAX-RSは変更されていません。これらのプロパティでは、以下の2点を宣言します。

  1. サービスのエンドポイント

  2. OAuth 2.0の設定に表示されるサービス名

作成されたクラスには、以下の設定が含まれます。

@Component(
property = {
JaxrsWhiteboardConstants.JAX_RS_APPLICATION_BASE + "=/greetings",
JaxrsWhiteboardConstants.JAX_RS_NAME + "=Greetings.Rest"
},
service = Application.class)

上記の設定は、このエンドポイントでサービスを以下のように登録します。

https://[server-name]:[port]/o/greetings

Tomcatを使ってこれをローカルでテストしている場合、URLは以下の通りです。

https://localhost:8080/o/greetings

上記のURLを呼び出すだけでは、サービスにアクセスすることはできないので、最初に認証する必要があります。認証方法の詳細は以下で説明します。

OAuth 2.0を使用してJAX-RS Webサービスを呼び出す

JAX-RS Webサービスは、デフォルトでは認証が必要です。これを有効にするには、OAuth 2.0アプリケーションを作成して、サービスへのアクセスを許可する方法を提供する必要があります。

  1. [コントロールパネル][設定] → *[OAuth2の管理]*へと移動し、追加ボタンをクリックして追加のアプリケーションを追加します。

  2. アプリケーションには、わかりやすい名前を付けます。

  3. このサービスに適した、クライアントプロファイルを選択します。これらは、OAuth 2標準からの適切な認証タイプ、または「フロー」を自動選択するテンプレートです。この例では、*[Headless Server]というプロファイルを選択してください。これにより、[Client Credentials]*という認証タイプが自動選択されます。

  4. *[保存]*をクリックします。

これにより、[クライアントID]と[クライアントシークレット]という2つの追加の作成フィールドとともに、フォームが再表示されます。これらを使用して、Webサービスの認証を行います。

分かりやすくするために、以下の例ではCurlを使用して認証します。アプリケーション用に作成された、クライアントIDおよびクライアントシークレットの2つの情報が必要です。たとえば、これらのフィールドに以下の値が含まれているとします。

クライアントID:id-12e14a84-e558-35a7-cf9a-c64aafc7f

クライアントシークレット:secret-93f14320-dc39-d67f-9dec-97717b814f

まず、OAuthトークンをリクエストする必要があります。ローカルでテストしている場合、以下のようなリクエストを送ります。

curl http://localhost:8080/o/oauth2/token -d 'grant_type=client_credentials&client_id=id-12e14a84-e558-35a7-cf9a-c64aafc7f&client_secret=secret-93f14320-dc39-d67f-9dec-97717b814f'

応答は、JSONです。

{"access_token":"a7f12bef7f2e578cf64bce4085db8f17b6a3c2963f865a65b374e89784bbca5","token_type":"Bearer","expires_in":600,"scope":"GET POST PUT"}

この中には、クライアント用に作成されたトークンが含まれています。600秒で期限切れになり、このWebサービスのGET、POST、およびPUTを許可します。

サービスを呼び出す場合は、以下のようにHTTPヘッダーにトークンを指定する必要があります。

curl --header "Authorization: Bearer a7f12bef7f2e578cf64bce4085db8f17b6a3c2963f865a65b374e89784bbca5" http://localhost:8080/o/greetings/morning

認証を使用すると、Webサービスを呼び出してリクエストに応答できます。

Good morning!

もちろん、これはOAuth 2.0の認証フローの1つにすぎません。バックエンドがLiferay DXPでホストされているJAX-RS WebサービスのWebベースのクライアントを作成している場合、上記以外のフローを使って行います。詳細については、OAuth 2.0のドキュメンテーションを参照してください。また、OAuth 2.0はセキュリティのためにHTTPSの使用を想定しており、上記のURLはローカルテストのみを目的としています。当然ながら、OAuthトークンはクライアントとサーバー間で平文で渡すには向いていません。 必ず、本番環境でサーバーがHTTPSを使用していることを確認してください。

Liferay DXPのプラットフォームでJAX-RS Webサービスを作成、デプロイ、および呼び出す方法は、これで以上です。

関連トピック

Service Builder Web Services

« JAX-RSおよびJAX-WSJAX-WS »
この記事は役に立ちましたか?
1人中1人がこの記事が役に立ったと言っています