Desarrollo con usuarios de servicios en AEM Forms

Este artículo lo acompaña durante el proceso de creación de un usuario de servicio en AEM Forms

En versiones anteriores de Adobe Experience Manager (AEM), la resolución de recursos administrativos se utilizaba para el procesamiento back-end que requería acceso al repositorio. El uso de la resolución de recursos administrativos está obsoleto en AEM 6.3. En su lugar, se utiliza un usuario del sistema con permisos específicos en el repositorio.

Obtenga más información sobre los detalles de creación y uso de usuarios de servicios en AEM.

Este artículo explica la creación de un usuario del sistema y la configuración de las propiedades del asignador de usuarios.

  1. Vaya a http://localhost:4502/crx/explorer/index.jsp

  2. Inicie sesión como ' admin '

  3. Haga clic en "Administración de usuarios"

  4. Haga clic en "Crear usuario del sistema"

  5. Establezca el tipo userid como ' data ' y haga clic en el icono verde para completar el proceso de creación del usuario del sistema

  6. Abrir configMgr

  7. Busque el servicio Apache Sling Service User Mapper y haga clic en para abrir las propiedades

  8. Haga clic en el icono + (signo más) para agregar la siguiente asignación de servicios

    • DevelopingWithServiceUser.core:getresourceresolver=data
    • DevelopingWithServiceUser.core:getformsresourceresolver=fd-service
  9. Haga clic en ' Guardar '

En la configuración anterior, DevelopingWithServiceUser.core es el nombre simbólico del paquete. getresourceresolver es el subservicio name.data es el usuario del sistema creado en el paso anterior.

También podemos obtener la resolución de recursos en nombre del usuario de fd-service. Este usuario de servicio se utiliza para document services. Por ejemplo, si desea certificar/aplicar derechos de uso, etc., utilizaremos la resolución de recursos del usuario de fd-service para realizar las operaciones

  1. Descargue y descomprima el archivo zip asociado con este artículo.

  2. Vaya a http://localhost:4502/system/console/bundles

  3. Carga e inicio del paquete OSGi

  4. Asegúrese de que el paquete esté en estado activo

  5. Ahora ha creado correctamente un System User y también ha implementado el Service User bundle.

    Para proporcionar acceso a /content, otorgue al usuario del sistema (' data ') permisos de lectura en el nodo de contenido.

    1. Vaya a http://localhost:4502/useradmin
    2. Buscar los datos del usuario ' '. Este es el mismo usuario del sistema que creó en el paso anterior.
    3. Haga doble clic en el usuario y, a continuación, haga clic en la ficha Permisos
    4. Proporcione acceso de lectura a la carpeta "contenido".
    5. Para utilizar el usuario del servicio para obtener acceso a la carpeta /content, utilice el siguiente código
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 desea acceder al archivo /content/dam/data.json del paquete, utilice el siguiente código. Este código supone que ha dado permisos de lectura al usuario "data" en el 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(); }
}

A continuación se muestra el código completo de la implementación

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

}

En esta página