Développer avec des profils utilisateurs de service dans AEM Forms
Cet article vous guide tout au long du processus de création d’un profil 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 back-end 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 ; il est remplacé par un profil utilisateur système disposant d’autorisations spécifiques dans le référentiel.
En savoir plus sur la création et l’utilisation des utilisateurs et utilisatrices de service dans AEM.
Cet article décrit la création d’un profil utilisateur système et la configuration des propriétés du service de mappage des utilisateurs et des utilisatrices.
-
Accédez à http://localhost:4502/crx/explorer/index.jsp.
-
Connectez-vous en tant qu’« admin ».
-
Cliquez sur « Administration des utilisateurs et utilisatrices ».
-
Cliquez sur « Créer un profil utilisateur système ».
-
Définissez le type userid sur « data » et cliquez sur l’icône verte pour terminer le processus de création du profil utilisateur système.
-
Recherchez Service de mappage des profils utilisateurs de services Apache Sling et cliquez dessus pour ouvrir les propriétés.
-
Cliquez sur l’icône + (plus) pour ajouter le mappage de service suivant.
- DevelopingWithServiceUser.core:getresourceresolver=data
- DevelopingWithServiceUser.core:getformsresourceresolver=fd-service
-
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.
-
Téléchargez et décompressez le fichier zip associé à cet article.
-
Accédez à http://localhost:4502/system/console/bundles.
-
Charger et démarrer le lot OSGi
-
Vérifiez que le lot est en état actif.
-
Vous avez maintenant créé un profil Utilisateur système et déployé le lot Utilisateur de service.
Pour permettre l’accès à /content, attribuez au profil utilisateur système (« data ») des autorisations de lecture sur le nœud de contenu.
- Accédez à http://localhost:4502/useradmin.
- Recherchez le profil utilisateur « data ». Il s’agit du profil utilisateur système que vous avez créé à l’étape précédente.
- Double-cliquez sur le profil utilisateur, puis cliquez sur l’onglet « Autorisations ».
- Accordez l’accès « read » au dossier « content ».
- Pour utiliser le profil utilisateur de 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 accordé des autorisations de lecture au profil utilisateur « data » sur le nœud /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 œuvre est fourni 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;
}
}