Developing with Service Users in AEM Forms

Senaste uppdatering: 2024-01-26
  • Skapat för:
  • Experienced
    Developer

I den här artikeln beskrivs hur du skapar en tjänstanvändare i AEM Forms

I tidigare versioner av Adobe Experience Manager (AEM) användes den administrativa resurslösaren för backend-bearbetning som krävde åtkomst till databasen. Användningen av den administrativa resurslösaren har tagits bort i AEM 6.3. I stället används en systemanvändare med specifik behörighet i databasen.

Läs mer om skapa och använda tjänstanvändare i AEM.

I den här artikeln beskrivs hur du skapar en systemanvändare och konfigurerar egenskaperna för användarmappningen.

  1. Navigera till http://localhost:4502/crx/explorer/index.jsp

  2. Logga in som admin

  3. Klicka på ' Användaradministration '

  4. Klicka på Skapa systemanvändare

  5. Ange användartypen som data och klicka på den gröna ikonen för att slutföra processen att skapa systemanvändaren

  6. Öppna configMgr

  7. Sök efter Användarmappningstjänsten för Apache Sling-tjänsten och klicka för att öppna egenskaperna

  8. Klicka på + ikon (plus) för att lägga till följande Service Mapping

    • DevelopingWithServiceUser.core:getresourceresolver=data
    • DevelopingWithServiceUser.core:getformsresourceresolver=fd-service
  9. Klicka på Spara

I ovanstående konfigurationsinställning är DevelopingWithServiceUser.core paketets symboliska namn. getresouresolver är undertjänstens namn.data är systemanvändaren som skapades i det tidigare steget.

Vi kan också hämta resurslösare för Fd-service-användare. Den här tjänstanvändaren används för dokumenttjänster. Om du t.ex. vill certifiera/använda användningsrättigheter använder vi resurslösare från fd-service-användare för att utföra åtgärderna

  1. Ladda ned och zippa upp zip-filen som är kopplad till den här artikeln.

  2. Navigera till http://localhost:4502/system/console/bundles

  3. Ladda upp och starta OSGi-paketet

  4. Kontrollera att paketet är i aktivt läge

  5. Du har nu skapat en Systemanvändare och även distribuerade Tjänstanvändarpaket.

    Ge systemanvändaren (' data ') läsbehörighet på innehållsnoden för att ge åtkomst till /content.

    1. Navigera till http://localhost:4502/useradmin
    2. Sök efter användarens data. Detta är samma systemanvändare som du skapade i det tidigare steget.
    3. Dubbelklicka på användaren och klicka sedan på fliken Behörigheter
    4. Ge läsbehörighet till mappen content.
    5. Använd följande kod för att få åtkomst till /content-mappen
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");

Om du vill komma åt /content/dam/data.json i ditt paket använder du följande kod. Den här koden förutsätter att du har gett läsbehörighet till användaren"data" på noden /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(); }
}

Den fullständiga koden för implementeringen anges nedan

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

}

På denna sida