Objectif

Méthode d’activation de la fonctionnalité de mise en cache sensible à l’autorisation du module répartiteur.

Étapes

 

Cette fonction nécessite un servlet supplémentaire, qui sera déployé dans AEM (vous devez coder un servlet qui répond aux requêtes HEAD pour renvoyer le code HTTP correct). Après le déploiement, la vérification concernant l’autorisation d’un utilisateur à accéder à des URI mis en cache est réalisée via la requête /bin/permissioncheck.html?uri=<handle>.

  1. Pour activer la fonctionnalité de mise en cache sensible à l’autorisation, ajoutez la section suivante à votre domaine dans le fichier de configuration dispatcher.any.  L’exemple de configuration ci-dessous permet uniquement la vérification des pages 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. Implémentez et déployez ensuite un servlet qui répond aux requêtes HEAD, tel que dans l’exemple suivant.  Veuillez noter que la réponse 200 signifie que l’utilisateur est autorisé à accéder à la récupération du fichier directement à partir du cache du répartiteur.  Tout autre état que 200 signifie que la requête ne serait pas exécutée à partir du cache.

    Voici un exemple de code permettant d’implémenter le servlet pour AEM 6 (merci à Dominique) :

     

    
    	
    
    
    
    
    

[1] Exemple de code

Remarque :

Exemple de code pour le servlet de mise en cache sensible à l’autorisation.  Le servlet ci-dessous répond aux requêtes HEAD par la réponse 200 si l’utilisateur authentifié est autorisé à consulter l’URI spécifié.

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

Application

Répartiteur 4.0.2+ et AEM 6.x

Ce produit est distribué sous licence Creative Commons Attribution - Pas d’utilisation commerciale - Partage à l’identique 3.0 non transposé  Les publications Twitter™ et Facebook ne sont pas couvertes par les dispositions Creative Commons.

Mentions légales   |   Politique de confidentialité en ligne