Desenvolvimento com usuários de serviço no AEM Forms

Este artigo o orienta pelo processo de criação de um usuário de serviço no AEM Forms

Em versões anteriores do Adobe Experience Manager (AEM), o resolvedor de recursos administrativos era usado para processamento de back-end, o que exigia acesso ao repositório. O uso do resolvedor de recursos administrativos foi descontinuado no AEM 6.3. Em vez disso, é usado um usuário do sistema com permissões específicas no repositório.

Saiba mais sobre os detalhes de criação e uso de usuários de serviço no AEM.

Este artigo aborda a criação de um usuário do sistema e a configuração das propriedades do mapeador do usuário.

  1. Navegue até http://localhost:4502/crx/explorer/index.jsp

  2. Fazer logon como "administrador"

  3. Clique em "Administração de usuários"

  4. Clique em "Criar usuário do sistema"

  5. Defina o tipo de ID do usuário como "dados" e clique no ícone verde para concluir o processo de criação do usuário do sistema

  6. Abrir configMgr

  7. Pesquisar por Serviço Mapeador de usuário do Apache Sling Service e clique em para abrir as propriedades

  8. Clique em + ícone (mais) para adicionar o seguinte Service Mapping

    • DevelopingWithServiceUser.core:getresourceresolver=data
    • DevelopingWithServiceUser.core:getformsresourceresolver=fd-service
  9. Clique em "Salvar"

Na configuração acima, DevelopingWithServiceUser.core é o nome simbólico do pacote. getresourceresolver é o nome do subserviço.data é o usuário do sistema criado na etapa anterior.

Também podemos obter o resolvedor de recursos em nome do usuário do serviço fd. Este usuário de serviço é usado para serviços de documento. Por exemplo, se você quiser Certificar/Aplicar direitos de uso, usaremos o resolvedor de recursos do usuário do serviço fd para executar as operações

  1. Baixe e descompacte o arquivo zip associado a este artigo.

  2. Navegue até http://localhost:4502/system/console/bundles

  3. Carregue e inicie o pacote OSGi

  4. Verifique se o pacote está no estado ativo

  5. Agora você criou um Usuário do sistema e também implantou o Pacote de usuário do serviço.

    Para fornecer acesso a /content, forneça ao usuário do sistema ("dados") permissões de leitura no nó de conteúdo.

    1. Navegue até http://localhost:4502/useradmin
    2. Pesquisar dados do usuário '. É o mesmo usuário do sistema criado na etapa anterior.
    3. Clique duas vezes no usuário e clique na guia "Permissões"
    4. Conceda acesso de leitura à pasta de conteúdo.
    5. Para usar o usuário do serviço para obter acesso à pasta /content, use o seguinte 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");

Se quiser acessar o arquivo /content/dam/data.json em seu pacote, você usará o código a seguir. Esse código supõe que você tenha dado permissões de leitura ao usuário de "dados" no nó /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(); }
}

O código completo da implementação é fornecido abaixo

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

}
recommendation-more-help
8de24117-1378-413c-a581-01e660b7163e