La pagina non viene memorizzata in cache e l’utente viene autorizzato
- Dispatcher stabilisce che il contenuto non viene memorizzato in cache o che richiede un aggiornamento.
- Dispatcher inoltra la richiesta originale al motore di rendering.
- Il motore di rendering chiama il servlet di autorizzazione di AEM (diverso dal servlet AuthChcker di Dispatcher) per eseguire un controllo di sicurezza. Quando l’utente viene autorizzato, il rendering include la pagina sottoposta a rendering nel corpo del messaggio di risposta.
- Dispatcher inoltra la risposta al browser. Dispatcher memorizza in cache il corpo del messaggio di risposta del rendering.
L’utente non viene autorizzato
- Dispatcher controlla la cache.
- Dispatcher invia al rendering un messaggio di richiesta che include tutte le righe di intestazione della richiesta del browser.
- Il motore di rendering chiama il servlet Auth Checker per eseguire un controllo di sicurezza che ha esito negativo e inoltra la richiesta originale a Dispatcher.
- Dispatcher inoltra la richiesta originale al motore di rendering.
- Il motore di rendering chiama il servlet di autorizzazione di AEM (diverso dal servlet AuthChcker di Dispatcher) per eseguire un controllo di sicurezza. Quando l’utente viene autorizzato, il rendering include la pagina sottoposta a rendering nel corpo del messaggio di risposta.
- Dispatcher inoltra la risposta al browser. Dispatcher memorizza in cache il corpo del messaggio di risposta del rendering.
Implementazione del caching sensibile alle autorizzazioni
Per implementare il caching sensibile alle autorizzazioni, esegui le operazioni sotto riportate:
- Sviluppa un servlet che esegua l’autenticazione e l’autorizzazione
- Configura Dispatcher
Header always set Cache-Control private
.Per AEM as a Cloud Service consulta la pagina Memorizzazione in cache per ulteriori dettagli su come impostare intestazioni private di memorizzazione in cache.
Crea il servlet Auth Checker
Crea e distribuisci un servlet che esegua l’autenticazione e l’autorizzazione dell’utente che richiede il contenuto web. Il servlet può utilizzare qualsiasi autenticazione. Può inoltre utilizzare qualsiasi metodo di autorizzazione. Ad esempio, può utilizzare l’account utente AEM e le ACL dell’archivio. In alternativa, può utilizzare un servizio di ricerca LDAP. Distribuisci il servlet all’istanza AEM utilizzata da Dispatcher come rendering.
Il servlet deve essere accessibile a tutti gli utenti. Pertanto, il tuo servlet deve estendere la classe org.apache.sling.api.servlets.SlingSafeMethodsServlet
che fornisce l’accesso in sola lettura al sistema.
Il servlet riceve solo richieste HEAD dal rendering, pertanto devi semplicemente implementare il metodo doHead
.
Il rendering include l’URI della risorsa richiesta come parametro della richiesta HTTP. Ad esempio, un servlet di autorizzazione è accessibile tramite /bin/permissioncheck
. Per eseguire un controllo di sicurezza sulla pagina /content/geometrixx-outdoors/en.html, il rendering include il seguente URL nella richiesta HTTP:
/bin/permissioncheck?uri=/content/geometrixx-outdoors/en.html
Il messaggio di risposta del servlet deve contenere i seguenti codici di stato HTTP:
- 200: autenticazione e autorizzazione eseguite con esito positivo.
Il seguente esempio di servlet ottiene l’URL della risorsa richiesta dalla richiesta HTTP. Il codice utilizza l’annotazione Felix SCR Property
per impostare il valore della proprietà sling.servlet.paths
su /bin/permissioncheck. Nel metodo doHead
, il servlet ottiene l’oggetto sessione e utilizza il metodo checkPermission
per determinare il codice di risposta appropriato.