DocumentazioneAEMTutorial su AEMTutorial su AEM Foundation

Sviluppo per la condivisione CORS (Cross-Origin Resource Sharing)

Last update: Mon May 05 2025 00:00:00 GMT+0000 (Coordinated Universal Time)
  • Si applica a:
  • Experience Manager 6.4
  • Experience Manager 6.5
  • Argomenti:

Creato per:

  • Principiante
  • Sviluppatore

Breve esempio di utilizzo di CORS per accedere al contenuto di AEM da un'applicazione Web esterna tramite JavaScript lato client. In questo esempio viene utilizzata la configurazione OSGi CORS per abilitare l’accesso CORS su AEM. L’approccio di configurazione OSGi è fattibile quando:

  • Una singola origine accede al contenuto AEM Publish
  • Per AEM Author è necessario l’accesso a CORS

Se è necessario l'accesso multiorigine alla pubblicazione AEM, consulta questa documentazione.

video poster

https://video.tv.adobe.com/v/326687?quality=12&learn=on&captions=ita

In questo video:

  • www.example.com è mappato a localhost tramite /etc/hosts
  • aem-publish.local è mappato a localhost tramite /etc/hosts
  • SimpleHTTPServer (un wrapper per SimpleHTTPServer🔗 di Python) sta distribuendo la pagina HTML tramite la porta 8000.
    • Non più disponibile in Mac App Store. Usa simili come Jeeves.
  • AEM Dispatcher è in esecuzione in Apache HTTP Web Server 2.4 e la richiesta di reverse-proxying a aem-publish.local in localhost:4503 è in esecuzione.

Per ulteriori dettagli, rivedi Informazioni su Cross-Origin Resource Sharing (CORS) in AEM.

www.example.com HTML e JAVASCRIPT

La logica di questa pagina Web è

  1. Facendo clic sul pulsante
  2. Invia una richiesta AJAX GET a http://aem-publish.local/content/we-retail/.../experience/_jcr_content.1.json
  3. Recupera jcr:title dalla risposta JSON
  4. Inserisce jcr:title nel DOM
<html>
<head>
<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
</head>
<body style="width: 960px; margin: 2rem auto; font-size: 2rem;">
    <button style="font-size: 2rem;"
            data="fn-getTitle">Get Title as JSON from AEM</button>
    <pre id="title">The page title AJAX'd in from AEM will injected here</pre>

    <script>
    $(function() {

        /** Get Title as JSON **/
        $('body').on('click', '[data="fn-getTitle"]', function(e) {
            $.get('http://aem-publish.local/content/we-retail/us/en/experience/_jcr_content.1.json', function(data) {
                $('#title').text(data['jcr:title']);
            },'json');

            e.preventDefault();
            return false;
        });
    });
    </script>
</body>
</html>

Configurazione di fabbrica OSGi

La factory di configurazione OSGi per Cross-Origin Resource Sharing è disponibile tramite:

  • http://<host>:<port>/system/console/configMgr > Adobe Granite Cross-Origin Resource Sharing Policy
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
    jcr:primaryType="sling:OsgiConfig"
    alloworigin="[https://www.example.com:8000]"
    alloworiginregexp="[]"
    allowedpaths="[/content/we-retail/.*]"
    exposedheaders="[]"
    maxage="{Long}1800"
    supportedheaders="[Origin,Accept,X-Requested-With,Content-Type,
Access-Control-Request-Method,Access-Control-Request-Headers]"
    supportedmethods="[GET]"
    supportscredentials="{Boolean}false"
/>

Configurazione Dispatcher

Consentire le intestazioni di richiesta CORS

Per consentire alle intestazioni di richiesta HTTP di passare ad AEM per l'elaborazione, devono essere consentite nella configurazione /clientheaders di Dispatcher.

/clientheaders {
   ...
   "Origin"
   "Access-Control-Request-Method"
   "Access-Control-Request-Headers"
}

Memorizzazione nella cache delle intestazioni di risposta CORS

Per consentire il caching e il serving delle intestazioni CORS sul contenuto memorizzato nella cache, aggiungi la seguente configurazione /cache /headers al file dispatcher.any di pubblicazione di AEM.

/publishfarm {
    ...
    /cache {
        ...
        # CORS HTTP response headers
        # https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#the_http_response_headers
        /headers {
            ...
            "Access-Control-Allow-Origin"
            "Access-Control-Expose-Headers"
            "Access-Control-Max-Age"
            "Access-Control-Allow-Credentials"
            "Access-Control-Allow-Methods"
            "Access-Control-Allow-Headers"
        }
    ...
    }
...
}

Riavviare l'applicazione server Web dopo aver apportato modifiche al file dispatcher.any.

È probabile che la cancellazione completa della cache sia necessaria per garantire che le intestazioni siano memorizzate nella cache in modo appropriato alla successiva richiesta dopo un aggiornamento della configurazione di /cache /headers.

Materiali di supporto

  • Jeeves per macOS

  • Python SimpleHTTPServer (compatibile con Windows/macOS/Linux)

  • Condivisione CORS (Cross-Origin Resource Sharing) in AEM

  • Condivisione risorse tra le origini (W3C)

  • Controllo accesso HTTP (Mozilla MDN)

recommendation-more-help
c92bdb17-1e49-4e76-bcdd-89e4f85f45e6