Die Seite wurde zwischengespeichert und der Benutzer ist autorisiert

  1. Der Dispatcher ermittelt, dass der angeforderte Inhalt zwischengespeichert wurde und gültig ist.
  2. Der Dispatcher sendet eine Anfragenachricht an den Renderer. Der HEAD-Abschnitt enthält alle Kopfzeilen aus der Browser-Anfrage.
  3. Der Renderer ruft das Auth-Checker-Servlet auf, um die Sicherheitsprüfung durchzuführen, und antwortet dem Dispatcher. Die Antwortnachricht enthält den HTTP-Status-Code „200“, um anzuzeigen, dass die Person autorisiert ist.
  4. Der Dispatcher sendet eine Antwortnachricht an den Browser, die aus den Kopfzeilen der Renderer-Antwort und dem zwischengespeicherten Inhalt im Textkörper besteht.

Die Seite wurde nicht zwischengespeichert und der Benutzer ist autorisiert

  1. Der Dispatcher ermittelt, dass der Inhalt nicht zwischengespeichert wurde oder aktualisiert werden muss.
  2. Der Dispatcher leitet die ursprüngliche Anfrage an den Renderer weiter.
  3. Der Renderer ruft das autorisierende AEM-Servlet (dies ist nicht das Dispatcher-AuthChecker-Servlet) auf, um eine Sicherheitsprüfung durchzuführen. Wenn die Person autorisiert ist, schließt der Renderer die gerenderte Seite im Text der Antwortnachricht ein.
  4. Der Dispatcher leitet die Antwort an den Browser weiter. Der Dispatcher fügt den Text der Antwortnachricht des Renderers zum Cache hinzu.

Der Benutzer ist nicht autorisiert

  1. Der Dispatcher überprüft den Cache.
  2. Der Dispatcher sendet eine Anfragenachricht an den Renderer, die alle Kopfzeilen der Browser-Anfrage enthält.
  3. Der Renderer ruft das Auth-Checker-Servlet auf, um eine Sicherheitsprüfung durchzuführen. Diese führt zu einem Fehler und der Renderer leitet die ursprüngliche Anfrage an den Dispatcher weiter.
  4. Der Dispatcher leitet die ursprüngliche Anfrage an den Renderer weiter.
  5. Der Renderer ruft das autorisierende AEM-Servlet (dies ist nicht das Dispatcher-AuthChecker-Servlet) auf, um eine Sicherheitsprüfung durchzuführen. Wenn die Person autorisiert ist, schließt der Renderer die gerenderte Seite im Text der Antwortnachricht ein.
  6. Der Dispatcher leitet die Antwort an den Browser weiter. Der Dispatcher fügt den Text der Antwortnachricht des Renderers zum Cache hinzu.

Implementieren der Zwischenspeicherung unter Berücksichtigung von Berechtigungen

Wenn Sie die Zwischenspeicherung unter Berücksichtigung von Berechtigungen implementieren möchten, führen Sie die folgenden Schritte aus:

  • Entwickeln eines Servlets zur Authentifizierung und Autorisierung
  • Konfigurieren des Dispatchers
HINWEIS
In der Regel werden sichere Ressourcen in einem anderen Ordner als nicht sichere Dateien gespeichert, z. B. unter „/content/secure/“.
HINWEIS
Wenn sich ein CDN (oder ein anderer Cache) vor dem Dispatcher befindet, sollten Sie die Caching-Header entsprechend festlegen, damit das CDN den privaten Inhalt nicht zwischenspeichert. Beispiel: Header always set Cache-Control private.
Weitere Informationen zum Festlegen von privaten Caching-Headern finden Sie für AEM as a Cloud Service auf der Seite Caching.

Erstellen des Auth-Checker-Servlets

Erstellen Sie ein Servlet, das die Authentifizierung und Autorisierung der Person ausführt, die den Web-Inhalt anfordert. Stellen Sie dann das Servlet bereit. Das Servlet kann eine beliebige Authentifizierung. sowie eine beliebige Autorisierungsmethode verwenden. Beispielsweise kann es das AEM-Benutzerkonto und Repository-ACLs. oder einen LDAP-Lookup-Dienst verwenden. Stellen Sie das Servlet in der AEM-Instanz bereit, die der Dispatcher als Renderer verwendet.

Alle Benutzenden müssen auf das Servlet zugreifen können. Daher sollte das Servlet die org.apache.sling.api.servlets.SlingSafeMethodsServlet-Klasse erweitern, die Lesezugriff auf das System bereitstellt.

Das Servlet empfängt nur HEAD-Anforderungen vom Renderer, sodass Sie nur die doHead-Methode implementieren müssen.

Der Renderer schließt den URI der angeforderten Ressource als Parameter der HTTP-Anforderung ein. Der Zugriff auf ein Autorisierungsservlet erfolgt z. B. über /bin/permissioncheck. Um eine Sicherheitsprüfung auf der Seite „/content/geometrixx-outdoors/en.html“ durchzuführen, schließt der Renderer die folgende URL in die HTTP-Anforderung ein:

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

Die Antwortnachricht des Servlets muss den folgenden HTTP-Status-Code enthalten:

  • 200: Authentifizierung und Autorisierung erfolgreich.

Das folgende Beispiel-Servlet ruft die URL der angeforderten Ressource aus der HTTP-Anfrage ab. Der Code verwendet die Property-Anmerkung der Felix SCR, um den Wert der sling.servlet.paths-Eigenschaft auf „/bin/permissioncheck“ festzulegen. In der doHead-Methode ruft das Servlet das Sitzungsobjekt ab und bestimmt mit der checkPermission-Methode den entsprechenden Antwortcode.

HINWEIS
Der Wert der Eigenschaft „sling.servlet.paths“ muss im Sling Servlet Resolver-Dienst (org.apache.sling.servlets.resolver.SlingServletResolver) aktiviert werden.