La page est mise en cache et l’utilisateur est autorisé

  1. Dispatcher détermine que le contenu demandé est mis en cache et valide.
  2. Dispatcher envoie un message de requête au rendu. La section HEAD comprend toutes les lignes d’en-tête de la requête du navigateur.
  3. Le rendu appelle le servlet auth checker pour effectuer la vérification de sécurité et répond à Dispatcher. Le message de réponse comprend un code d’état HTTP 200 pour indiquer que la personne est autorisée.
  4. Dispatcher envoie un message de réponse au navigateur, constitué des lignes d’en-tête de la réponse de rendu et du contenu mis en cache dans le corps.

La page n’est pas mise en cache et l’utilisateur est autorisé

  1. Dispatcher détermine que le contenu n’est pas mis en cache ou nécessite une mise à jour.
  2. Le Dispatcher transfère la requête d’origine au rendu.
  3. Le rendu appelle le servlet d’autorisation d’AEM (il ne s’agit pas du servlet AuthChecker du Dispatcher) pour effectuer une vérification de sécurité. Lorsque la personne est autorisée, le rendu inclut la page rendue dans le corps du message de réponse.
  4. Dispatcher transfère la réponse au navigateur. Dispatcher ajoute le corps du message de réponse du rendu au cache.

L’utilisateur n’est pas autorisé

  1. Dispatcher vérifie le cache.
  2. Dispatcher envoie un message de requête au rendu qui inclut toutes les lignes d’en-tête de la requête du navigateur.
  3. Le rendu appelle le servlet AuthChecker pour effectuer une vérification de sécurité qui échoue, puis transfère la requête d’origine au Dispatcher.
  4. Le Dispatcher transfère la requête d’origine au rendu.
  5. Le rendu appelle le servlet d’autorisation d’AEM (il ne s’agit pas du servlet AuthChecker du Dispatcher) pour effectuer une vérification de sécurité. Lorsque la personne est autorisée, le rendu inclut la page rendue dans le corps du message de réponse.
  6. Dispatcher transfère la réponse au navigateur. Dispatcher ajoute le corps du message de réponse du rendu au cache.

Mettre en œuvre la mise en cache sensible aux autorisations

Pour mettre en œuvre la mise en cache sensible aux autorisations, effectuez les tâches suivantes :

  • Développer un servlet qui effectue l’authentification et l’autorisation
  • Configurer Dispatcher
REMARQUE
En règle générale, les ressources sécurisées sont stockées dans un dossier distinct des fichiers non sécurisés. Par exemple, /content/secure/.
REMARQUE
Lorsqu’un réseau CDN (ou tout autre cache) se trouve devant Dispatcher, vous devez définir les en-têtes de mise en cache en conséquence, afin que le réseau CDN ne mette pas en cache le contenu privé. Par exemple : Header always set Cache-Control private.
Pour AEM as a Cloud Service, voir la page Mettre en cache pour en savoir plus sur la définition des en-têtes de mise en cache privés.

Créer le servlet Auth Checker

Créez et déployez un servlet qui effectue l’authentification et l’autorisation de l’utilisateur ou de l’utilisatrice qui demande le contenu web. Le servlet peut utiliser n’importe quelle authentification. Il peut également utiliser n’importe quelle méthode d’autorisation. Par exemple, il peut utiliser les listes ACL du compte d’utilisateur ou d’utilisatrice et du référentiel AEM. Il peut également utiliser un service de recherche LDAP. Vous déployez le servlet vers l’instance AEM que Dispatcher utilise comme rendu.

Le servlet doit être accessible à tous les utilisateurs et utilisatrices. Par conséquent, votre servlet doit étendre la classe org.apache.sling.api.servlets.SlingSafeMethodsServlet, qui offre un accès en lecture seule au système.

Le servlet reçoit uniquement les requêtes HEAD du rendu. Il suffit donc de mettre en œuvre la méthode doHead.

Le rendu inclut l’URI de la ressource demandée sous la forme d’un paramètre de requête HTTP. Par exemple, vous pouvez accéder à un servlet d’autorisation via /bin/permissioncheck. Pour effectuer une vérification de sécurité sur la page /content/geometrixx-outdoors/fr.html, la fonctionnalité de rendu inclut l’URL suivante dans la requête HTTP :

/bin/permissioncheck?uri=/content/geometrixx-outdoors/en.html

Le message de réponse du servlet doit contenir les codes d’état HTTP suivants :

  • 200 : authentification et autorisation transmises.

L’exemple de servlet suivant obtient l’URL de la ressource demandée à partir de la requête HTTP. Le code utilise l’annotation Property Felix SCR pour définir la valeur de la propriété sling.servlet.paths sur /bin/permissioncheck. Dans la méthode doHead, le servlet récupère l’objet session et utilise la méthode checkPermission pour déterminer le code de réponse approprié.

REMARQUE
La valeur de la propriété sling.servlet.paths doit être activée dans le service Sling Servlet Resolver (org.apache.sling.servlets.resolver.SlingServletResolver).