在AEM Forms中使用服务用户进行开发
本文向您介绍在AEM Forms中创建服务用户的过程
在Adobe Experience Manager (AEM)的早期版本中,管理资源解析程序用于需要访问存储库的后端处理。 AEM 6.3中不建议使用管理资源解析程序。而是使用存储库中具有特定权限的系统用户。
了解有关在AEM中创建和使用服务用户的详细信息。
本文介绍了如何创建系统用户和配置用户映射器属性。
-
以“管理员”身份登录
-
单击“用户管理”
-
单击“创建系统用户”
-
将用户ID类型设置为“ data ”,然后单击绿色图标以完成创建系统用户的过程
-
搜索 Apache Sling服务用户映射器服务,然后单击以打开属性
-
单击 + 图标(加号)以添加以下服务映射
- DevelopingWithServiceUser.core:getresourceresolver=data
- DevelopingWithServiceUser.core:getformsresourceresolver=fd-service
-
单击“保存”
在上述配置设置中, DevelopingWithServiceUser.core是捆绑包的符号名称。 getresourceresolver是子服务名称。data是在前一步骤中创建的系统用户。
还可以代表fd-service用户获取资源解析程序。 此服务用户用于文档服务。 例如,如果要验证/应用使用权限等,我们将使用fd-service用户的资源解析器来执行操作
-
上传并启动OSGi捆绑包
-
确保捆绑包处于活动状态
-
您现在已成功创建 系统用户,并部署了 服务用户捆绑包。
要提供对/content的访问权限,请授予系统用户(“数据”)对内容节点的读取权限。
- 导航到http://localhost:4502/useradmin
- 搜索用户“ data ”。 这是您在上一步中创建的相同系统用户。
- 双击用户,然后单击“权限”选项卡
- 授予“内容”文件夹的“读取”访问权限。
- 要使用服务用户访问/content文件夹,请使用以下代码
com.mergeandfuse.getserviceuserresolver.GetResolver aemDemoListings = sling.getService(com.mergeandfuse.getserviceuserresolver.GetResolver.class);
resourceResolver = aemDemoListings.getServiceResolver();
// get the resource. This will succeed because we have given ' read ' access to the content node
Resource contentResource = resourceResolver.getResource("/content/forms/af/sandbox/abc.pdf");
如果要访问捆绑包中的/content/dam/data.json文件,将使用以下代码。 此代码假定您已经为/content/dam/节点上的“data”用户授予了读取权限
@Reference
GetResolver getResolver;
.
.
.
try {
ResourceResolver serviceResolver = getResolver.getServiceResolver();
// To get resource resolver specific to fd-service user. This is for Document Services
ResourceResolver fdserviceResolver = getResolver.getFormsServiceResolver();
Node resNode = getResolver.getServiceResolver().getResource("/content/dam/data.json").adaptTo(Node.class);
} catch(LoginException ex) {
// Unable to get the service user, handle this exception as needed
} finally {
// Always close all ResourceResolvers you open!
if (serviceResolver != null( { serviceResolver.close(); }
if (fdserviceResolver != null) { fdserviceResolver.close(); }
}
下面给出了实施的完整代码
package com.mergeandfuse.getserviceuserresolver.impl;
import java.util.HashMap;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import com.mergeandfuse.getserviceuserresolver.GetResolver;
@Component(service = GetResolver.class)
public class GetResolverImpl implements GetResolver {
@Reference
ResourceResolverFactory resolverFactory;
@Override
public ResourceResolver getServiceResolver() {
System.out.println("#### Trying to get service resource resolver .... in my bundle");
HashMap < String, Object > param = new HashMap < String, Object > ();
param.put(ResourceResolverFactory.SUBSERVICE, "getresourceresolver");
ResourceResolver resolver = null;
try {
resolver = resolverFactory.getServiceResourceResolver(param);
} catch (LoginException e) {
System.out.println("Login Exception " + e.getMessage());
}
return resolver;
}
@Override
public ResourceResolver getFormsServiceResolver() {
System.out.println("#### Trying to get Resource Resolver for forms .... in my bundle");
HashMap < String, Object > param = new HashMap < String, Object > ();
param.put(ResourceResolverFactory.SUBSERVICE, "getformsresourceresolver");
ResourceResolver resolver = null;
try {
resolver = resolverFactory.getServiceResourceResolver(param);
} catch (LoginException e) {
System.out.println("Login Exception ");
System.out.println("The error message is " + e.getMessage());
}
return resolver;
}
}
recommendation-more-help
8de24117-1378-413c-a581-01e660b7163e