本文档中的示例和示例仅适用于JEE环境上的AEM Forms。
可以为Rights Management服务创建“邀请外部用户”处理程序。 邀请外部用户处理程序使Rights Management服务能够邀请外部用户成为Rights Management用户。 用户成为Rights Management用户后,用户可以执行任务,如打开受策略保护的PDF文档。 在将“邀请外部用户”处理程序部署到AEM Forms后,您可以使用管理控制台与其进行交互。
邀请外部用户处理程序是AEM Forms组件。 在创建“邀请外部用户处理程序”之前,建议您熟悉创建组件。
步骤摘要
要开发“邀请外部用户”处理程序,必须执行以下步骤:
要设置开发环境,您必须创建新的Java项目,如Eclipse项目。 支持的Eclipse版本为3.2.1
或更高版本。
Rights Management SPI要求在项目的类路径中设置edc-server-spi.jar
文件。 如果不引用此JAR文件,则无法在Java项目中使用Rights Management SPI。 此JAR文件随[install directory]\Adobe\Adobe_Experience_Manager_forms\sdk\spi
文件夹中的AEM Forms SDK一起安装。
除了将edc-server-spi.jar
文件添加到项目的类路径之外,还必须添加使用Rights Management服务API所需的JAR文件。 使用“邀请外部用户”处理程序中的Rights Management服务API需要这些文件。
要开发邀请外部用户处理程序,必须创建实现com.adobe.edc.server.spi.ersp.InvitedUserProvider
接口的Java类。 此类包含名为invitedUser
的方法,当使用可通过管理控制台访问的添加已邀请的用户页提交电子邮件地址时,Rights Management服务将调用此方法。
invitedUser
方法接受java.util.List
实例,该实例包含从添加受邀用户页面提交的字符串类型电子邮件地址。 invitedUser
方法返回InvitedUserProviderResult
对象的数组,通常是电子邮件地址到用户对象的映射(不返回null)。
除了演示如何创建邀请外部用户处理程序外,本节还使用AEM Forms API。
邀请外部用户处理程序的实现包含一个名为createLocalPrincipalAccount
的用户定义方法。 此方法接受一个字符串值,该字符串值将电子邮件地址指定为参数值。 createLocalPrincipalAccount
方法假设存在名为EDC_EXTERNAL_REGISTERED
的本地域。 您可以将此域名配置为任何所需的域名;但是,对于生产应用程序,您可能希望与企业域集成。
createUsers
方法迭代每个电子邮件地址并创建相应的User对象(EDC_EXTERNAL_REGISTERED
域中的本地用户)。 最后,调用doEmails
方法。 此方法有意保留为示例中的存根。 在生产实施中,它将包含应用程序逻辑,用于向新创建的用户发送邀请电子邮件。 它留在示例中,用于演示实际应用程序的应用逻辑流。
以下邀请外部用户处理程序实施接受通过管理控制台可访问的“添加已邀请的用户”页面提交的电子邮件地址。
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];
}
}
}
此Java类将保存为名为InviteExternalUsersSample.java的JAVA文件。
必须定义组件XML文件,才能部署邀请外部用户处理程序组件。 每个组件都存在一个组件XML文件,它提供了有关该组件的元数据。
以下component.xml
文件用于invite外部用户处理程序。 请注意,服务名称为InviteExternalUsersSample
,此服务公开的操作名为invitedUser
。 输入参数是java.util.List
实例,输出值是com.adobe.edc.server.spi.esrp.InvitedUserProviderResult
实例的数组。
<component xmlns="http://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>
要将邀请外部用户处理程序部署到AEM Forms,必须将Java项目打包到JAR文件中。 您必须确保邀请外部用户处理程序的业务逻辑所依赖的外部JAR文件(如edc-server-spi.jar
和adobe-rightsmanagement-client.jar
文件)也包含在JAR文件中。 此外,组件XML文件必须存在。 component.xml
文件和外部JAR文件必须位于JAR文件的根目录中。
在下图中,显示了BootstrapImpl
类。 本节不讨论如何创建BootstrapImpl
类。
下图显示了打包到invite外部用户处理程序的JAR文件中的Java项目内容。
A.组件所需的外部JAR文件B. JAVA文件
必须将邀请外部用户处理程序打包到JAR文件中。 在上一图中,请注意列出了.JAVA文件。 打包到JAR文件后,还必须指定相应的.CLASS文件。 如果没有.CLASS文件,授权处理程序将不起作用。
将外部授权处理程序打包到JAR文件后,可以将组件部署到AEM Forms。 在给定时间只能部署一个邀请外部用户处理程序。
您还可以通过编程方式部署组件。
要测试邀请外部用户处理程序,您可以使用管理控制台添加要邀请的外部用户。
要使用管理控制台添加要邀请的外部用户,请执行以下操作:
EDC_EXTERNAL_REGISTERED
的域。 保存更改。EDC_EXTERNAL_REGISTERED
域中显示为用户。如果停止或卸载组件,邀请外部用户处理程序将失败。