De pagina is niet in cache geplaatst en de gebruiker is geautoriseerd

  1. Dispatcher bepaalt dat de inhoud niet in de cache wordt geplaatst of moet worden bijgewerkt.
  2. Dispatcher stuurt het oorspronkelijke verzoek door naar de rendermethode.
  3. Renderen roept AEM autorisator servlet (dit servlet is niet de servlet van Dispatcher AuthChcker) om een veiligheidscontrole uit te voeren. Wanneer de gebruiker wordt geautoriseerd, omvat teruggeven de teruggegeven pagina in het lichaam van het antwoordbericht.
  4. Dispatcher stuurt de reactie door naar de browser. Dispatcher voegt de hoofdtekst van het antwoordbericht van de renderbewerking toe aan de cache.

Gebruiker is niet geautoriseerd

  1. Dispatcher controleert de cache.
  2. Dispatcher verzendt een aanvraagbericht naar de rendermethode die alle headerregels uit het verzoek van de browser bevat.
  3. Renderen roept de server van de Controleur van de Auth om een veiligheidscontrole uit te voeren, die ontbreekt, en teruggeeft door:sturen het originele verzoek aan Dispatcher.
  4. Dispatcher stuurt het oorspronkelijke verzoek door naar de rendermethode.
  5. Renderen roept AEM autorisator servlet (dit servlet is niet de servlet van Dispatcher AuthChcker) om een veiligheidscontrole uit te voeren. Wanneer de gebruiker wordt geautoriseerd, omvat teruggeven de teruggegeven pagina in het lichaam van het antwoordbericht.
  6. Dispatcher stuurt de reactie door naar de browser. Dispatcher voegt de hoofdtekst van het antwoordbericht van de renderbewerking toe aan de cache.

Het uitvoeren van toestemming-gevoelige caching

Om toestemming-gevoelig caching uit te voeren, voer de volgende taken uit:

  • Ontwikkelen van een servlet die authentificatie en vergunning uitvoert
  • De Dispatcher configureren
NOTE
Beveiligde bronnen worden doorgaans in een aparte map opgeslagen dan onbeveiligde bestanden. Bijvoorbeeld: /content/secure/
NOTE
Wanneer er een CDN (of een ander geheime voorgeheugen) vóór de Dispatcher is, dan zou u de in het voorgeheugen onderbrengende kopballen dienovereenkomstig moeten plaatsen zodat CDN niet de privé inhoud in het voorgeheugen onderbrengt. Bijvoorbeeld: Header always set Cache-Control private .
Voor AEM as a Cloud Service, zie de Cachingpagina voor meer details over hoe te om privé caching kopballen te plaatsen.

De servlet Auth Checker maken

Maak en implementeer een servlet die de verificatie en autorisatie uitvoert van de gebruiker die de webinhoud aanvraagt. De servlet kan om het even welke authentificatie gebruiken. Zij kan ook elke vergunningsmethode gebruiken. Bijvoorbeeld, kan het de AEM gebruikersrekening en bewaarplaats ACLs gebruiken. Of u kunt hiervoor een LDAP-opzoekservice gebruiken. U implementeert de servlet op de AEM instantie die Dispatcher gebruikt als de render.

De servlet moet toegankelijk zijn voor alle gebruikers. Daarom moet uw servlet de klasse org.apache.sling.api.servlets.SlingSafeMethodsServlet uitbreiden, die alleen-lezen toegang tot het systeem biedt.

De servlet ontvangt alleen HEAD-aanvragen van de rendermethode, dus u moet de methode doHead alleen implementeren.

Renderen omvat URI van het gevraagde middel als parameter van het HTTP- verzoek. Een verificatieserver is bijvoorbeeld toegankelijk via /bin/permissioncheck . Als u een beveiligingscontrole wilt uitvoeren op de pagina /content/geometrixx-outdoors/en.html, bevat de render de volgende URL in de HTTP-aanvraag:

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

Het servlet-antwoordbericht moet de volgende HTTP-statuscodes bevatten:

  • 200: Verificatie en autorisatie geslaagd.

Het volgende voorbeeldservlet verkrijgt URL van het gevraagde middel van het HTTP- verzoek. De code gebruikt de SCR-annotatie Felix Property om de waarde van de eigenschap sling.servlet.paths in te stellen op /bin/permissioncheck. In de methode doHead verkrijgt de servlet het sessieobject en gebruikt de methode checkPermission om de juiste antwoordcode te bepalen.

NOTE
De waarde van de eigenschap sling.servlet.paths moet zijn ingeschakeld in de service Sling Servlet Resolver (org.apache.sling.servlets.resolver.SlingServletResolver).