Je souhaite écrire des données dans AEM. Le code ci-dessous fonctionne correctement pour moi dans AEM 6.0, mais pas dans AEM 6.1. Lève toujours une exception de connexion de la manière suivante:
" Exception de connexion lors de l'obtention d'un utilisateur CRX pour le service: 'writeService'.org.Apache.sling.api.resource.LoginException: impossible de dériver le nom d'utilisateur pour le groupe group.tti.commons-service [395] et le sous-service writeService "
Config OSGI:
Code dans ma classe:
import javax.jcr.Session;
import org.Apache.sling.api.resource.ResourceResolver;
import org.Apache.sling.api.resource.ResourceResolverFactory;
....
@Reference
private ResourceResolverFactory factory;
private ResourceResolver resourceResolverWriter;
private static Session adminSession;
...
...
Map<String, Object> param = new HashMap<String, Object>();
param.put(ResourceResolverFactory.SUBSERVICE, "writeService");
try {
resourceResolverWriter = factory.getServiceResourceResolver(param);
adminSession = resourceResolverWriter.adaptTo(Session.class);
...
} catch (LoginException e) {
...
}
Est-ce que je manque quelque chose sur AEM 6.1?
Sur les conseils de Justin, j'ai essayé et trouvé la solution. Poster ainsi peut être bénéfique pour les autres.
Objectif: écrire des données/nœuds dans le contenu (en particulier dans/etc/userdata) lorsqu'un utilisateur se connecte.
Nous pouvons y parvenir de deux manières (dans tous les cas, l'utilisateur doit être un «utilisateur du système»)
Processus 1:
Étape 1: Utiliser un utilisateur système intégré dans la configuration OSGI. Dans OSGI, sélectionnez Service de mappeur d’utilisateur du service Apache Sling
group.abc.commons-service: writeService = oauthservice (où 'oauthservice' est un utilisateur du système)
Étape 2: Attribuez à cet utilisateur du système les autorisations nécessaires pour accéder au dossier de contenu.
Vous voyez les utilisateurs du système dans CRX à:/home/users/system
Processus 2:
Étape 1: Créez un nouvel utilisateur du système. pour faire ça
Ouvrir http: // localhost: 4502/crx/Explorer/index.jsp
Connectez-vous en tant qu'administrateur> Ouvrez 'Administration des utilisateurs> Sélectionnez' Créer un utilisateur système '> Entrez "ID utilisateur"> Appuyez sur le bouton vert (vous ne verrez pas de bouton de sauvegarde :)
J'ai créé "abcwriteservice" utilisateur
Étape 2: Allez dans Autorisations, et pour l'utilisateur 'abcwriteservice', donnez Autorisations pour accéder au dossier où vous souhaitez écrire. (Dans cet exemple:/etc/userdata)
Étape 3: Ouvrez la console OSGI et accédez à "Service du mappeur d'utilisateurs du service Apache Sling" pour définir le mappage utilisateur-service. Par exemple: 'group.commons-service: writeService = abcwriteservice'
Étape 4: Dans le code, j'ai ajouté un paramètre supplémentaire, comme:
Map<String, Object> param = new HashMap<String, Object>();
param.put(ResourceResolverFactory.SUBSERVICE, "writeService");
try {
resourceResolverWriter = factory.getServiceResourceResolver(param);
if (resourceResolverWriter == null)
throw new Exception("Could not obtain a CRX User for the Service:'writeService'");
Node usersRootNode = adminSession.getNode("/etc/userdata/users");
Dans AEM 6.1, les utilisateurs de service doivent être des utilisateurs du système, ce qui signifie que leur nœud dans le JCR est de type rep: SystemUser. Ces utilisateurs ne peuvent pas être utilisés pour se connecter normalement, uniquement par des processus en arrière-plan. L'utilisateur admin est not un utilisateur système. Vous ne pouvez donc pas utiliser cet utilisateur admin dans un mappage d'utilisateur de service comme celui-ci. Vous devez créer un nouvel utilisateur système et lui attribuer les autorisations appropriées.
Si vous souhaitez en savoir plus sur l'historique de cette modification, consultez https://issues.Apache.org/jira/browse/SLING-3854 .
De même, si vous planifiez une future migration vers AEM 6.2, envisagez d’utiliser ACS Commons pour faciliter la création et la disponibilité des utilisateurs du système. Cela élimine tout ce processus manuel qui peut être sujet à des erreurs.
https://Adobe-consulting-services.github.io/acs-aem-commons/features/ensure-service-users/index.html