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