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 da 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.
-
Navegue até http://localhost:4502/crx/explorer/index.jsp
-
Fazer logon como "administrador"
-
Clique em "Administração de usuários"
-
Clique em "Criar usuário do sistema"
-
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
-
Pesquise por Serviço Mapeador de Usuários do Apache Sling Service e clique em para abrir as propriedades
-
Clique no ícone + (mais) para adicionar o seguinte Service Mapping
- DevelopingWithServiceUser.core:getresourceresolver=data
- DevelopingWithServiceUser.core:getformsresourceresolver=fd-service
-
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
-
Navegue até http://localhost:4502/system/console/bundles
-
Carregue e inicie o pacote OSGi
-
Verifique se o pacote está no estado ativo
-
Você agora criou com êxito um Usuário do Sistema e também implantou o conjunto de Usuários de Serviço.
Para fornecer acesso a /content, forneça ao usuário do sistema ("dados") permissões de leitura no nó de conteúdo.
- Navegue até http://localhost:4502/useradmin
- Pesquisar dados do usuário '. É o mesmo usuário do sistema criado na etapa anterior.
- Clique duas vezes no usuário e clique na guia "Permissões"
- Conceda acesso de leitura à pasta de conteúdo.
- 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;
}
}