Entwickeln mit Dienstbenutzenden in AEM Forms
Dieser Artikel führt Sie durch die Erstellung einer Dienstbenutzerin bzw. eines Dienstbenutzers in AEM Forms.
In früheren Versionen von Adobe Experience Manager (AEM) wurde der administrative Ressourcen-Resolver für die Backend-Verarbeitung verwendet, wofür Zugriff auf das Repository benötigt wurde. Die Nutzung des administrativen Ressourcen-Resolvers wird in AEM 6.3 nicht mehr unterstützt. Stattdessen wird eine Systembenutzerin bzw. ein Systembenutzer mit bestimmten Berechtigungen im Repository verwendet.
Weitere Informationen finden Sie unter Erstellen und Verwenden von Dienstbenutzenden in AEM.
Dieser Artikel erläutert, wie Sie eine Systembenutzerin bzw. einen Systembenutzer erstellen und User-Mapper-Eigenschaften konfigurieren.
-
Navigieren Sie zu http://localhost:4502/crx/explorer/index.jsp.
-
Melden Sie sich als „admin“ an.
-
Klicken Sie auf „Benutzerverwaltung“.
-
Klicken Sie auf „Systembenutzer erstellen“.
-
Legen Sie den Benutzer-ID-Typ auf „Daten“ fest und klicken Sie auf das grüne Symbol, um die Erstellung der Systembenutzerin bzw. des Systembenutzers abzuschließen.
-
Suchen Sie nach Apache Sling Service User Mapper Service und klicken Sie darauf, um die Eigenschaften zu öffnen.
-
Klicken Sie auf das Symbol + (Plus), um die folgende Dienstzuordnung hinzuzufügen.
- DevelopingWithServiceUser.core:getresourceresolver=data
- DevelopingWithServiceUser.core:getformsresourceresolver=fd-service
-
Klicken Sie auf „Speichern“.
In der obigen Konfigurationseinstellung ist „DevelopingWithServiceUser.core“ der symbolische Name des Bundles. „getresourceresolver“ ist der Subservice-Name und „data“ ist die Systembenutzerin bzw. der Systembenutzer, die bzw. der im vorherigen Schritt erstellt wurde.
Wir können auch den Ressourcen-Resolver im Namen der fd-service-Benutzerin bzw. des fd-service-Benutzers abrufen. Diese Dienstbenutzerin bzw. dieser Dienstbenutzer wird für die Dokumentendienste verwendet. Wenn Sie z. B. Nutzungsrechte zertifizieren/anwenden möchten, verwenden wir den Ressourcen-Resolver der fd-service-Benutzerin bzw. des fd-service-Benutzers, um die Vorgänge durchzuführen.
-
Laden Sie die mit diesem Artikel verknüpfte ZIP-Datei herunter und entpacken Sie sie.
-
Navigieren Sie zu http://localhost:4502/system/console/bundles
-
Laden Sie das OSGi-Bundle hoch und starten Sie es.
-
Stellen Sie sicher, dass sich das Bundle in einem aktiven Status befindet.
-
Sie haben nun erfolgreich eine Systembenutzerin bzw. einen Systembenutzer erstellt und zudem das Bundle für Dienstbenutzende bereitgestellt.
Um Zugriff auf „/content“ zu gewähren, erteilen Sie der Systembenutzerin bzw. dem Systembenutzer („data“) Leseberechtigungen für den Inhaltsknoten.
- Navigieren Sie zu http://localhost:4502/useradmin.
- Suchen Sie nach der Benutzerin bzw. dem Benutzer „data“. Hierbei handelt es sich um dieselbe Systembenutzerin bzw. denselben Systembenutzer, die bzw. den Sie im vorherigen Schritt erstellt haben.
- Doppelklicken Sie auf die Benutzerin bzw. den Benutzer und klicken Sie dann auf die Registerkarte „Berechtigungen“.
- Gewähren Sie Lesezugriff auf den Ordner „/content“.
- Verwenden Sie den folgenden Code, um mithilfe der Dienstbenutzerin bzw. des Dienstbenutzers Zugriff auf den Ordner „/content“ zu erhalten.
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");
Verwenden Sie den folgenden Code, wenn Sie auf die Datei „/content/dam/data.json“ in Ihrem Paket zugreifen möchten. Dieser Code setzt voraus, dass Sie der Benutzerin bzw. dem Benutzer „data“ im Knoten „/content/dam/“ Leseberechtigungen erteilt haben.
@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(); }
}
Der vollständige Code der Implementierung steht nachfolgend:
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;
}
}