Zielsetzung

Wie aktivieren Sie das berechtigungsabhängige Caching des Disponentenmoduls?

Schritte

 

Diese Funktion erfordert ein zusätzliches Servlet, das für AEM bereitgestellt wird (Sie müssen ein Servlet codieren, das auf HEAD-Anfragen reagiert und den korrekten HTTP-Code zurückgibt). Nach dem Deployment wird überprüft, ob ein Benutzer auf eine zwischengespeicherte URI zugreifen darf, indem /bin/permissioncheck.html?uri=<handle> angefordert wird.

  1. Um das berechtigungsabhängige Caching zu aktivieren, fügen Sie den folgenden Abschnitt in der Konfigurationsdatei dispatcher.any zu Ihrer Datei hinzu.  Die Beispielkonfiguration unten ermöglicht nur die Überprüfung auf HTML-Seiten.

    # 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. Als Nächstes ist die Implementierung und Bereitstellung eines Servlets erforderlich, das auf HEAD-Anfragen reagiert. Gehen Sie wie im unten stehenden Beispiel beschrieben vor.  Beachten Sie, dass eine 200-Antwort bedeutet, dass der Benutzer die Datei direkt vom Dispatcher-Cache abrufen kann.  Ein anderer Status als 200 bedeutet, dass die Anfrage nicht vom Cache bedient wird.

    Unten finden Sie einen Beispielcode, der das Servlet für AEM 6 implementiert (dank Dominique):

     

    
    	
    
    
    
    
    

[1] Beispielcode

Hinweis:

Beispielcode für das Servlet für berechtigungsabhängiges Caching.  Das unten stehende Servlet antwortet auf HEAD-Anfragen mit einer 200-Antwort, wenn der authentifizierte Benutzer Zugriff auf die Anzeige der spezifizierten URI hat.

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

Gilt für

Dispatcher 4.0.2+ und AEM 6.x

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie