Objetivo

Como habilitar o recurso de armazenamento de cache sensível a permissão do módulo do dispatcher.

Etapas

 

Esse recurso requer um servlet adicional, que será implementado no AEM (você precisa codificar um servlet que responda às solicitações HEAD para retornar o código HTTP correto). Após a implantação, o processo de verificar se um usuário tem permissão para acessar alguma URL em cache é feito solicitando /bin/permissioncheck.html?uri=<handle>

  1. Para habilitar o armazenamento em cache sensível a permissão, adicione a seguinte seção ao farm no arquivo de configuração dispatcher.any.  A configuração de amostra abaixo permite verificar somente páginas HTML.

    # Authorization checker: before a page in the cache is delivered, a HEAD
    # request is sent to the URL specified in 'url' with the query string
    # '?uri=<page>'. If the response status is 200 (OK), the page is returned
    # from the cache. Otherwise, the request is forwarded to the render and
    # its response returned.
    /auth_checker
      {
      # request is sent to this URL with '?uri=<page>' appended
      /url "/bin/permissioncheck.html"
          
      # only the requested pages matching the filter section below are checked,
      # all other pages get delivered unchecked
      /filter
        {
        /0000
          {
          /glob "*"
          /type "deny"
          }
        /0001
          {
          /glob "*.html"
          /type "allow"
          }
        }
      # any header line returned from the auth_checker's HEAD request matching
      # the section below will be returned as well
      /headers
        {
        /0000
          {
          /glob "*"
          /type "deny"
          }
        /0001
          {
          /glob "Set-Cookie:*"
          /type "allow"
          }
        }
      }
  2. Em seguida, implemente um servlet como o exemplo abaixo, que responda às solicitações HEAD.  Observe que uma resposta 200 significa que o usuário tem acesso para recuperar o arquivo diretamente do cache do dispatcher.  Qualquer outro status, exceto 200, significa que a solicitação não será atendida a partir do cache.

    Abaixo está o código de amostra que implementa o servlet para o AEM 6 (graças a Dominique):

     

    
    	
    
    
    
    
    

[1] Código de amostra

Observação:

Código de amostra para o servlet de armazenamento em cache sensível a permissão.  O servlet abaixo responde às solicitações HEAD com uma resposta 200 se o usuário autenticado tiver acesso para visualizar a URL especificada.

dispatcher-psc-permissioncheck/core/src/main/java/com/adobe/support/security/dispatcher/PermissionHeadServlet.java
package com.adobe.support.security.dispatcher;

import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component
@Service
@Property(name="sling.servlet.paths", value= {"/bin/permissioncheck"})
public class PermissionHeadServlet extends SlingSafeMethodsServlet {
    private static final Logger log = LoggerFactory.getLogger(PermissionHeadServlet.class);
    
    public void doHead(SlingHttpServletRequest request, SlingHttpServletResponse response) {
        String uri = request.getParameter("uri");
        Resource test = request.getResourceResolver().resolve(uri);
        if(test != null && !test.isResourceType(Resource.RESOURCE_TYPE_NON_EXISTING)) {
        	response.setStatus(SlingHttpServletResponse.SC_OK);
        } else {
        	response.setStatus(SlingHttpServletResponse.SC_UNAUTHORIZED);
        }
    }
}

Aplica-se a

Dispatcher 4.0.2+ e AEM 6.x

Esta obra está licenciada sob uma licença não adaptada da Creative Commons Attribution-Noncommercial-Share Alike 3.0  As publicações do Twitter™ e do Facebook não são cobertas pelos termos do Creative Commons.

Avisos legais   |   Política de privacidade online