Ontwikkelen met servicegebruikers in AEM Forms
In dit artikel wordt u door het proces geleid voor het maken van een servicegebruiker in AEM Forms
In vorige versies van Adobe Experience Manager (AEM) werd de beheerresourceoplosser gebruikt voor back-end verwerking, waarvoor toegang tot de opslagplaats was vereist. Het gebruik van de oplossing van de administratieve bron is afgekeurd in AEM 6.3. In plaats daarvan wordt een systeemgebruiker met specifieke machtigingen in de opslagplaats gebruikt.
Leer meer over de details van het creƫren van en het gebruiken van de dienstgebruikers in AEM.
Dit artikel doorloopt de verwezenlijking van een systeemgebruiker en het vormen van de eigenschappen van de gebruikerskaart.
-
Navigeer aan http://localhost:4502/crx/explorer/index.jsp
-
Aanmelden als beheerder
-
Klik op Gebruikersbeheer
-
Klik op Systeemgebruiker maken
-
Stel het type gebruikersnaam in als ' data ' en klik op het groene pictogram om het maken van de systeemgebruiker te voltooien
-
Onderzoek naar de Dienst van het Mapper van de Gebruiker van de Dienst van Apache Sling en klik om de eigenschappen te openen
-
Klik op het pictogram + (plus) om de volgende servicetoewijzing toe te voegen
- DevelopingWithServiceUser.core:getresourceresolver=data
- DevelopingWithServiceUser.core:getformsresourceresolver=fd-service
-
Klik op Opslaan '
In de bovenstaande configuratie-instelling DevelopingWithServiceUser.core is de symbolische naam van de bundel. getresourceresolver is subservice name.data is de systeemgebruiker die in de vroegere stap wordt gecreeerd.
We kunnen ook resourceresolver krijgen namens gebruikers van fd-service. Deze servicegebruiker wordt gebruikt voor documentservices. Als u bijvoorbeeld gebruiksrechten wilt certificeren/toepassen enz., gebruiken we resourceoploser van gebruikers van fd-service om de bewerkingen uit te voeren
-
Download en decomprimeer het ZIP-bestand dat aan dit artikel is gekoppeld.
-
Navigeer aan http://localhost:4502/system/console/bundles
-
Upload en start de OSGi-bundel
-
Zorg ervoor dat de bundel actief is
-
U hebt met succes a Gebruiker van het Systeem gecreeerd en ook de bundel van de Gebruiker van de Dienst opgesteld.
Om toegang tot /content te verlenen, geef de systeemgebruiker (' data ') toestemmingen op de inhoudsknoop lezen.
- Navigeer aan http://localhost:4502/useradmin
- Zoeken naar gegevens van gebruiker '. Dit is dezelfde systeemgebruiker die u in de vorige stap hebt gemaakt.
- Dubbelklik op de gebruiker en klik vervolgens op het tabblad Machtigingen
- ' read ' toegang geven tot de map 'content'.
- Om de de dienstgebruiker te gebruiken om toegang tot /content omslag te verkrijgen gebruik de volgende code
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");
Als u toegang wilt krijgen tot het bestand /content/dam/data.json in uw bundel, gebruikt u de volgende code. Deze code veronderstelt u gelezen toestemmingen aan de "gegevens"gebruiker op /content/dam/ knoop hebt gegeven
@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(); }
}
De volledige code van de uitvoering wordt hieronder gegeven
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;
}
}