Sviluppo con gli utenti del servizio in AEM Forms
Questo articolo illustra il processo di creazione di un utente di servizio in AEM Forms
Nelle versioni precedenti di Adobe Experience Manager (AEM), il risolutore risorse amministrativo veniva utilizzato per l’elaborazione back-end che richiedeva l’accesso all’archivio. L’utilizzo del risolutore risorse amministrativo è diventato obsoleto in AEM 6.3. Viene invece utilizzato un utente di sistema con autorizzazioni specifiche nell’archivio.
Ulteriori informazioni sui dettagli di creazione e utilizzo di utenti del servizio in AEM.
Questo articolo illustra come creare un utente di sistema e configurare le proprietà di mappatura utente.
-
Accedi come ' admin '
-
Fai clic su "Amministrazione utenti"
-
Fai clic su "Crea utente di sistema"
-
Imposta il tipo di ID utente come "data" e fai clic sull’icona verde per completare il processo di creazione dell’utente di sistema
-
Cerca Servizio User Mapper di Apache Sling Service e fai clic per aprire le proprietà
-
Fai clic sull'icona + (segno più) per aggiungere la seguente mappatura del servizio
- DevelopingWithServiceUser.core:getresourceresolver=data
- DevelopingWithServiceUser.core:getformsresourceresolver=fd-service
-
Fai clic su Salva
Nell’impostazione di configurazione precedente DevelopingWithServiceUser.core è il nome simbolico del bundle. getresourceresolver è il nome del servizio secondario. data è l'utente di sistema creato nel passaggio precedente.
Possiamo anche ottenere il risolutore risorse per conto dell’utente fd-service. Questo utente del servizio viene utilizzato per i servizi documentali. Ad esempio, se desideri certificare/applicare i diritti di utilizzo, utilizzeremo il risolutore risorse dell’utente fd-service per eseguire le operazioni
-
Scarica e decomprimi il file zip associato a questo articolo.
-
Carica e avvia il bundle OSGi
-
Assicurati che il bundle sia in stato attivo
-
Hai creato un utente di sistema e distribuito anche il bundle utente di servizio.
Per fornire l’accesso a /content, assegna all’utente di sistema ("dati") le autorizzazioni di lettura sul nodo del contenuto.
- Passa a http://localhost:4502/useradmin
- Cerca dati utente '. Si tratta dello stesso utente di sistema creato nel passaggio precedente.
- Fai doppio clic sull’utente e quindi fai clic sulla scheda "Autorizzazioni"
- Concedi l’accesso in lettura alla cartella "content".
- Per utilizzare l’utente del servizio per accedere alla cartella /content, utilizza il seguente codice
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");
Se desideri accedere al file /content/dam/data.json nel pacchetto, utilizza il seguente codice. Questo codice presuppone che tu abbia dato le autorizzazioni di lettura all’utente "dati" sul nodo /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(); }
}
Il codice completo dell’implementazione è riportato di seguito
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;
}
}