Développement avec des utilisateurs de services dans AEM Forms

Cet article vous guide tout au long du processus de création d’un utilisateur de service dans AEM Forms

Dans les versions précédentes d’Adobe Experience Manager (AEM), le résolveur de ressources d’administration était utilisé pour le traitement principal qui nécessitait l’accès au référentiel. L’utilisation du résolveur de ressources d’administration est obsolète dans AEM 6.3. À la place, un utilisateur système disposant d’autorisations spécifiques dans le référentiel est utilisé.

En savoir plus sur les détails de la création et de l’utilisation des utilisateurs du service dans AEM.

Cet article décrit la création d’un utilisateur système et la configuration des propriétés du mappeur utilisateur.

  1. Accédez à http://localhost:4502/crx/explorer/index.jsp

  2. Connectez-vous en tant qu’"admin"

  3. Cliquez sur "Administration des utilisateurs"

  4. Cliquez sur "Créer un utilisateur système".

  5. Définissez le type userid sur "data" et cliquez sur l’icône verte pour terminer le processus de création de l’utilisateur système.

  6. Ouvrez configMgr

  7. Recherchez "Service de mappage des utilisateurs du service Apache Sling" et cliquez pour ouvrir les propriétés.

  8. Cliquez sur l’icône + (plus) pour ajouter le mappage de service suivant :

    • DevelopingWithServiceUser.core:getresourceresolver=data
    • DevelopingWithServiceUser.core:getformsresourceresolver=fd-service
  9. Cliquez sur Enregistrer .

Dans la configuration ci-dessus, le paramètre DevelopingWithServiceUser.core est le nom symbolique du lot. getresourceresolver est le nom du sous-service. data est l’utilisateur système créé à l’étape précédente.

Nous pouvons également obtenir le résolveur de ressources au nom de l’utilisateur fd-service. Cet utilisateur de service est utilisé pour les services de document. Par exemple, si vous souhaitez certifier/appliquer des droits d’utilisation, etc., nous utiliserons le résolveur de ressources de l’utilisateur fd-service pour effectuer les opérations.

  1. Téléchargez et décompressez le fichier zip associé à cet article.

  2. Accédez à http://localhost:4502/system/console/bundles

  3. Chargement et démarrage du lot OSGi

  4. Assurez-vous que le lot est à principal état

  5. Vous avez maintenant créé un utilisateur système et déployé le lot utilisateur de service.

    Pour permettre l’accès à /content, attribuez à l’utilisateur système (' data ') des autorisations de lecture sur le noeud de contenu.

    1. Accédez à http://localhost:4502/useradmin
    2. Recherchez les données de l’utilisateur. Il s’agit du même utilisateur système que celui que vous avez créé à l’étape précédente.
    3. Double-cliquez sur l’utilisateur, puis cliquez sur l’onglet "Autorisations".
    4. Accédez au dossier 'content' en lecture.
    5. Pour utiliser l’utilisateur du service pour accéder au dossier /content , utilisez le code suivant :
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");

Si vous souhaitez accéder au fichier /content/dam/data.json de votre lot, vous utiliserez le code suivant. Ce code suppose que vous avez donné des autorisations de lecture à l’utilisateur "data" sur le noeud /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(); }
}

Le code complet de la mise en oeuvre est indiqué ci-dessous.

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

}

Sur cette page