外部ユーザー招待ハンドラーの作成 create-invite-external-users-handler
このドキュメントのサンプルと例は、JEE 環境の AEM Forms のみを対象としています。
Rights Management サービス用に外部ユーザー招待ハンドラーを作成できます。外部ユーザー招待ハンドラーを使用すると、Rights Management サービスは外部ユーザーを招待して Rights Management ユーザーにすることができます。Rights Management ユーザーになると、ポリシーで保護された PDF ドキュメントを開くなどのタスクを実行できるようになります。外部ユーザー招待ハンドラーが AEM Forms にデプロイされたら、管理コンソールを使用してハンドラーを操作できます。
手順の概要
外部ユーザー招待ハンドラーを作成するには、次の手順を実行する必要があります。
- 開発環境を設定します。
- 外部ユーザー招待ハンドラーの実装を定義します。
- コンポーネントの XML ファイルを定義します。
- 外部ユーザー招待ハンドラーをデプロイします。
- 外部ユーザー招待ハンドラーをテストします。
開発環境の設定 setting-up-development-environment
開発環境を設定するには、Eclipse プロジェクトなどの Java プロジェクトを作成する必要があります。サポートしている Eclipse のバージョンは 3.2.1
以降です。
Rights Management SPI にはプロジェクトのクラスパスに設定する edc-server-spi.jar
ファイルが必要です。この JAR ファイルを参照しない場合、Java プロジェクトで Rights Management SPI を使用できません。この JAR ファイルは、AEM Forms SDK と共に [install directory]\Adobe\Adobe_Experience_Manager_forms\sdk\spi
フォルダーにインストールされています。
また、edc-server-spi.jar
ファイルをプロジェクトのクラスパスに追加する場合は、Rights Management サービス API の使用に必要な JAR ファイルも追加する必要があります。これらのファイルは、外部ユーザー招待ハンドラー内で Rights Management サービス API を使用するために必要です。
外部ユーザー招待ハンドラー実装の定義 define-invite-external-users-handler
外部ユーザー招待ハンドラーを開発するには、 com.adobe.edc.server.spi.ersp.InvitedUserProvider
インターフェイスを実装する Java クラスを作成する必要があります。このクラスには、管理コンソールからアクセスできる 招待ユーザーの追加 ページを使用してメールアドレスが送信されたときに Rights Management サービスが呼び出す invitedUser
という名前のメソッドが含まれています。
invitedUser
メソッドは java.util.List
インスタンスを受け入れます。これには、招待ユーザーの追加 ページから送信される、文字列型のメールアドレスが含まれます。invitedUser
メソッドは、 InvitedUserProviderResult
オブジェクトの配列を返します。これは通常、メールアドレスからユーザーオブジェクトへのマッピングです(null を返さない)。
外部ユーザー招待ハンドラーの実装には、createLocalPrincipalAccount
という名前のユーザー定義メソッドが含まれます。このメソッドは、メールアドレスをパラメーター値として指定する文字列値を受け入れます。createLocalPrincipalAccount
メソッドは、 EDC_EXTERNAL_REGISTERED
と呼ばれるローカルドメインがすでに存在することを前提としています。このドメイン名は任意の名前に設定できます。ただし、本番アプリケーションの場合は、エンタープライズドメインと統合する必要がある場合があります。
createUsers
メソッドは、すべてのメールアドレスを反復処理し、対応するユーザーオブジェクト(EDC_EXTERNAL_REGISTERED
ドメインのローカルユーザー)を作成します。最後に、doEmails
メソッドが呼び出されます。このメソッドは、サンプル内でスタブとして意図的に残されています。実稼動環境の実装では、新しく作成されたユーザーに招待用のメールメッセージを送信するアプリケーションロジックが含まれます。実際のアプリケーションのアプリケーションロジックフローを示すために、サンプルに残しておきます。
外部ユーザー招待ハンドラー実装の定義 user-handler-implementation
次の外部ユーザー招待ハンドラーの実装は、管理コンソールからアクセスできる招待ユーザーの追加ページから送信されるメールアドレスを受け付けます。
package com.adobe.livecycle.samples.inviteexternalusers.provider;
import com.adobe.edc.server.spi.ersp.*;
import com.adobe.idp.dsc.clientsdk.ServiceClientFactory;
import com.adobe.idp.um.api.*;
import com.adobe.idp.um.api.infomodel.*;
import com.adobe.idp.um.api.impl.UMBaseLibrary;
import com.adobe.livecycle.usermanager.client.DirectoryManagerServiceClient;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class InviteExternalUsersSample implements InvitedUserProvider
{
private ServiceClientFactory _factory = null;
private User createLocalPrincipalAccount(String email_address) throws Exception
{
String ret = null;
// Assume the local domain already exists!
String domain = "EDC_EXTERNAL_REGISTERED";
List aliases = new ArrayList();
aliases.add( email_address );
User local_user = UMBaseLibrary.createUser( email_address, domain, email_address );
local_user.setCommonName( email_address );
local_user.setEmail( email_address );
local_user.setEmailAliases( aliases );
// You may wish to disable the local user until, for example, his registration is processed by a confirmation link
//local_user.setDisabled( true );
DirectoryManager directory_manager = new DirectoryManagerServiceClient( _factory );
String ret_oid = directory_manager.createLocalUser( local_user, null );
if( ret_oid == null )
{
throw new Exception( "FAILED TO CREATE PRINCIPAL FOR EMAIL ADDRESS: " + email_address );
}
return local_user;
}
protected User[] createUsers( List emails ) throws Exception
{
ArrayList ret_users = new ArrayList();
_factory = ServiceClientFactory.createInstance();
Iterator iter = emails.iterator();
while( iter.hasNext() )
{
String current_email = (String)iter.next();
ret_users.add( createLocalPrincipalAccount( current_email ) );
}
return (User[])ret_users.toArray( new User[0] );
}
protected void doInvitations(List emails)
{
// Here you may choose to send the users who were created an invitation email
// This step is completely optional, depending on your requirements.
}
public InvitedUserProviderResult[] invitedUser(List emails)
{
// This sample demonstrates the workflow for inviting a user via email
try
{
User[] principals = createUsers(emails);
InvitedUserProviderResult[] result = new InvitedUserProviderResult[principals.length];
for( int i = 0; i < principals.length; i++ )
{
result[i] = new InvitedUserProviderResult();
result[i].setEmail( (String)emails.get( i ) );
result[i].setUser( principals[i] );
}
doInvitations(emails);
System.out.println( "SUCCESSFULLY INVITED " + result.length + " USERS" );
return result;
}
catch( Exception e )
{
System.out.println( "FAILED TO INVITE USERS FOR INVITE USERS SAMPLE" );
e.printStackTrace();
return new InvitedUserProviderResult[0];
}
}
}
承認ハンドラー用のコンポーネント XML ファイルの定義 define-component-xml-authorization-handler
外部ユーザー招待ハンドラーのコンポーネントをデプロイするには、コンポーネント XML ファイルを定義します。コンポーネントの XML ファイルは、コンポーネントごとに存在し、コンポーネントに関するメタデータを提供します。
以下の component.xml
ファイルは、外部ユーザー招待ハンドラーに使用されます。サービス名は InviteExternalUsersSample
でこのサービスが公開する操作の名前は invitedUser
です。入力パラメーターは java.util.List
インスタンスで、出力値は com.adobe.edc.server.spi.esrp.InvitedUserProviderResult
インスタンスの配列です。
外部ユーザー招待ハンドラー用のコンポーネント XML ファイルの定義 component-xml-invite-external-users-handler
<component xmlns="https://adobe.com/idp/dsc/component/document">
<component-id>com.adobe.livecycle.samples.inviteexternalusers</component-id>
<version>1.0</version>
<bootstrap-class>com.adobe.livecycle.samples.inviteexternalusers.provider.BootstrapImpl</bootstrap-class>
<descriptor-class>com.adobe.idp.dsc.component.impl.DefaultPOJODescriptorImpl</descriptor-class>
<services>
<service name="InviteExternalUsersSample">
<specifications>
<specification spec-id="com.adobe.edc.server.spi.ersp.InvitedUserProvider"/>
</specifications>
<specification-version>1.0</specification-version>
<implementation-class>com.adobe.livecycle.samples.inviteexternalusers.provider.InviteExternalUsersSample</implementation-class>
<auto-deploy category-id="Samples" service-id="InviteExternalUsersSample" major-version="1" minor-version="0"/>
<operations>
<operation name="invitedUser">
<input-parameter name="input" type="java.util.List" required="true"/>
<output-parameter name="result" type="com.adobe.edc.server.spi.esrp.InvitedUserProviderResult[]"/>
</operation>
</operations>
</service>
</services>
</component>
外部ユーザー招待ハンドラーのパッケージ化 packaging-invite-external-users-handler
外部ユーザー招待ハンドラーを AEM Forms にデプロイするには、Java プロジェクトを JAR ファイルにパッケージ化する必要があります。外部ユーザー招待ハンドラーのビジネスロジックが依存する外部 JAR ファイル(edc-server-spi.jar
および adobe-rightsmanagement-client.jar
ファイルなど)は、JAR ファイルにも含まれます。また、コンポーネントの XML ファイルが存在する必要があります。component.xml
ファイルと外部 JAR ファイルは、JAR ファイルのルートに配置する必要があります。
BootstrapImpl
クラスが表示されます。この節では、BootstrapImpl
クラスを作成する方法については説明しません。次の図は、外部ユーザー招待ハンドラーの JAR ファイルにパッケージ化された Java プロジェクトのコンテンツを示します。
A.コンポーネントに必要な外部 JAR ファイル B. JAVA ファイル
外部ユーザー招待ハンドラーを JAR ファイルにパッケージ化します。前の図では、.JAVA ファイルが表示されています。JAR ファイルにパッケージ化した後は、対応する .CLASS ファイルも指定する必要があります。.CLASS ファイルがないと、認証ハンドラーは機能しません。
外部ユーザー招待ハンドラーのテスト testing-invite-external-users-handler
外部ユーザー招待ハンドラーをテストするには、管理コンソールを使用して、招待する外部ユーザーを追加します。
管理コンソールを使用して、招待する外部ユーザーを追加するには、次をおこないます。
-
Workbench を使用して、外部ユーザー招待ハンドラーの JAR ファイルをデプロイします。
-
アプリケーションサーバーを再起動します。
note note NOTE 「Ctrl + C」コマンドを使用して SDK を再起動することをお勧めします。 Java プロセスの停止など、別の方法を使用して AEM SDK を再起動すると、AEM 開発環境で不整合が生じる場合があります。 -
管理コンソールにログインします。
-
サービス/Rights Management/設定/ 招待済み ユーザーの登録 をクリックします。
-
招待ユーザーの登録を有効にするには、招待ユーザーの登録を有効にする ボックスをオンにします。組み込み登録システムを使用 の下で「いいえ」をクリックします。設定を保存します。
-
管理コンソールホームページで、設定/User Management/ドメイン管理 をクリックします。
-
「新規ローカルドメイン」をクリックします。次のページで、名前と識別子の値が
EDC_EXTERNAL_REGISTERED
のドメインを作成します。変更を保存します。 -
管理コンソールホームページで、サービス/Rights Management/招待ユーザーとローカルユーザー をクリックします。招待ユーザーの追加 ページが表示されます。
-
メールアドレスを入力します(現在の外部ユーザー招待ハンドラーは、メールメッセージを実際に送信しないので、アドレスが有効である必要はありません)。「OK」をクリックします。ユーザーがシステムに招待されます。
-
管理コンソールホームページで、 設定/User Management/ユーザーとグループ をクリックします。
-
「検索」フィールドに、指定したメールアドレスを入力します。「検索」をクリックします。招待したユーザーは、ローカルの
EDC_EXTERNAL_REGISTERED
ドメインに表示されます。