Entwickeln mit Dienstbenutzern in AEM Forms

Dieser Artikel führt Sie durch den Prozess der Erstellung 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, für die der Zugriff auf das Repository erforderlich war. Die Verwendung des administrativen Ressourcen-Resolvers wird in AEM 6.3 nicht mehr unterstützt. Stattdessen wird ein Systembenutzer mit spezifischen Berechtigungen im Repository verwendet.

Weitere Informationen zu Erstellen und Verwenden von Dienstbenutzern in AEM.

Dieser Artikel erläutert die Erstellung eines Systembenutzers und die Konfiguration der Eigenschaften des Benutzer-Mappers.

  1. Navigieren Sie zu http://localhost:4502/crx/explorer/index.jsp

  2. Als "Administrator"anmelden

  3. Klicken Sie auf "Benutzerverwaltung"

  4. Klicken Sie auf " Systembenutzer erstellen "

  5. Legen Sie den Benutzereridtyp auf "Daten"fest und klicken Sie auf das grüne Symbol, um die Erstellung des Systembenutzers abzuschließen.

  6. Öffnen Sie configMgr

  7. Suchen Sie nach Apache Sling Service User Mapper Service und klicken Sie auf , um die Eigenschaften zu öffnen

  8. Klicken Sie auf + Symbol (Plus) zum Hinzufügen der folgenden Dienstzuordnung

    • DevelopingWithServiceUser.core:getresourceresolver=data
    • DevelopingWithServiceUser.core:getformsresourceresolver=fd-service
  9. Klicken Sie auf Speichern .

In der obigen Konfiguration ist die Einstellung DevelopingWithServiceUser.core der symbolische Name des Bundles. getresourceresolver ist der Subdienstname.data ist der Systembenutzer, der im vorherigen Schritt erstellt wurde.

Wir können auch den Resource Resolver im Namen des fd-service-Benutzers erhalten. Dieser Dienstbenutzer wird für Document Services verwendet. Wenn Sie z. B. Nutzungsrechte zertifizieren/anwenden usw. möchten, verwenden wir den Ressourcen-Resolver des fd-service-Benutzers, um die Vorgänge auszuführen.

  1. Laden Sie die mit diesem Artikel verknüpfte ZIP-Datei herunter und entpacken Sie sie.

  2. Navigieren Sie zu http://localhost:4502/system/console/bundles

  3. Laden Sie das OSGi-Bundle hoch und starten Sie es.

  4. Stellen Sie sicher, dass das Bundle sich im aktiven Status befindet.

  5. Sie haben jetzt erfolgreich eine Systembenutzer und bereitgestellt Service User Bundle.

    Um Zugriff auf /content zu gewähren, erteilen Sie dem Systembenutzer (' data ') Leseberechtigungen für den Inhaltsknoten.

    1. Navigieren Sie zu http://localhost:4502/useradmin
    2. Suchen Sie nach Benutzerdaten ". Dies ist derselbe Systembenutzer, den Sie im vorherigen Schritt erstellt haben.
    3. Doppelklicken Sie auf den Benutzer und klicken Sie dann auf die Registerkarte Berechtigungen .
    4. Gewähren Sie " read " Zugriff auf den Ordner "content ".
    5. Verwenden Sie den folgenden Code, um mithilfe 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");

Wenn Sie auf die Datei /content/dam/data.json in Ihrem Bundle zugreifen möchten, verwenden Sie den folgenden Code. Dieser Code setzt voraus, dass Sie 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 ist unten aufgeführt.

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;
        }

}

Auf dieser Seite