Question

Comment activer la fonctionnalité de mise en cache sensible à l’autorisation du module répartiteur ?

Configuration

Cette fonction nécessite un contenu supplémentaire, qui sera déployé dans CQ (vous devez coder une servlet qui répond à l’url et renvoyer le code HTTP correct). Après le déploiement, la vérification concernant l’autorisation d’un utilisateur à une page est réalisée via la requête /bin/permissioncheck.html?uri=<handle>. Pour activer la fonctionnalité de mise en cache sensible à l’autorisation, ajoutez la section suivante à votre domaine dans le fichier de configuration dispatcher.any :

# 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"
      }
    }
  }

La configuration d’exemple permet uniquement la vérification des pages HTML.

Voici un exemple de code de mise en œuvre de la vérification pour CQ5 grâce à Dominik :)

/**
* @scr.component metatype="false"
* @scr.service
* @scr.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().getResource(uri);
        if (test != null) {
            response.setStatus(SlingHttpServletResponse.SC_OK);
        } else {
            response.setStatus(SlingHttpServletResponse.SC_UNAUTHORIZED);
        }
    }
}

Application

Répartiteur 4.0.2+ et CQ5.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