在AEM Forms中使用服務進行開發
本文將逐步說明在AEM Forms中建立服務使用者的程式
在舊版Adobe Experience Manager (AEM)中,管理資源解析器用於需要存取存放庫的後端處理。 AEM 6.3不建議使用管理資源解析程式。而是使用存放庫中具有特定許可權的系統使用者。
深入瞭解在AEM中建立及使用服務使用者的詳細資訊。
本文將逐步說明如何建立系統使用者及設定使用者對應程式屬性。
-
以「管理員」身分登入
-
按一下「使用者管理」
-
按一下「建立系統使用者」
-
將使用者ID型別設定為「 data 」,然後按一下綠色圖示以完成建立系統使用者的程式
-
搜尋 Apache Sling Service使用者對應程式服務,然後按一下以開啟屬性
-
按一下 + 圖示(加號)以新增下列服務對應
- DevelopingWithServiceUser.core:getresourceresolver=data
- DevelopingWithServiceUser.core:getformsresourceresolver=fd-service
-
按一下「儲存」
在上述組態設定中,DevelopingWithServiceUser.core是套件的符號名稱。 getresourceresolver是子服務名稱。data是在先前步驟中建立的系統使用者。
我們也可以代表fd-service使用者取得資源解析程式。 此服務使用者用於檔案服務。 例如,如果您想要認證/套用使用許可權等,我們將使用fd-service使用者的資源解析器來執行作業
-
上傳並啟動OSGi套件組合
-
確保套件組合處於作用中狀態
-
您現在已成功建立 系統使用者,並且已部署 服務使用者套件。
若要提供/content的存取權,請授予系統使用者('資料')內容節點的讀取許可權。
- 瀏覽至http://localhost:4502/useradmin
- 搜尋使用者「 data 」。 這是您在先前步驟中建立的相同系統使用者。
- 連按兩下使用者,然後按一下「許可權」索引標籤
- 將'read'存取權授予'content'資料夾。
- 若要使用服務使用者來存取/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/節點上「資料」使用者的讀取許可權
@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