AEM componenti e modelli formano un potente toolkit. Possono essere utilizzati dagli sviluppatori per fornire agli utenti aziendali dei siti Web, agli editor e agli amministratori le funzionalità necessarie per adattare i loro siti Web alle esigenze aziendali in continua evoluzione (agilità dei contenuti), mantenendo al contempo il layout uniforme dei siti (protezione del marchio).
Una tipica sfida per una persona responsabile di un sito Web, o per un insieme di siti Web (ad esempio in una succursale di un'azienda globale), è quella di introdurre un nuovo tipo di presentazione dei contenuti sui propri siti Web.
Supponiamo che sia necessario aggiungere una pagina di newslist ai siti Web, in cui sono elencati estratti di altri articoli già pubblicati. La pagina deve avere la stessa struttura e struttura del sito Web.
Il modo consigliato per affrontare tale sfida sarebbe di:
Questo approccio illustra come questo approccio consente agli utenti e agli amministratori del sito Web partecipanti di rispondere rapidamente alle esigenze aziendali, senza richiedere il coinvolgimento di team di sviluppo. Metodi alternativi, come la creazione di un nuovo modello, è in genere un esercizio costoso, che richiede un processo di gestione delle modifiche e il coinvolgimento del team di sviluppo. Ciò rende l'intero processo molto più lungo e costoso.
Gli sviluppatori di sistemi AEM dovrebbero pertanto utilizzare:
Le seguenti regole generali per gli sviluppatori hanno senso nella maggior parte dei progetti comuni:
Quando create componenti personalizzati o personalizzate un componente esistente, è spesso più semplice (e sicuro) riutilizzare le definizioni esistenti. Gli stessi principi si applicano anche ad altri elementi all'interno di AEM, ad esempio il gestore di errori.
È possibile eseguire questa operazione copiando e sovrapponendo la definizione esistente. In altre parole, copiando la definizione da /libs
a /apps/<your-project>
. Questa nuova definizione, in /apps
, può essere aggiornata in base alle tue esigenze.
Per ulteriori informazioni, consultate Utilizzo delle sovrapposizioni.
Esempio:
Personalizzazione di un componente
Questo comportava la sovrapposizione di una definizione di componente:
Crea una nuova cartella di componenti in /apps/<website-name>/components/<MyComponent>
copiando un componente esistente:
Ad esempio, per personalizzare la copia del componente Testo:
/libs/foundation/components/text
/apps/myProject/components/text
Personalizzazione delle pagine mostrate dal gestore errori
Questo caso comporta la sovrapposizione di un servlet:
Nell'archivio, copiare gli script predefiniti:
/libs/sling/servlet/errorhandler/
/apps/sling/servlet/errorhandler/
non è necessario modificare alcun elemento nel percorso /libs
.
Questo perché il contenuto di /libs
viene sovrascritto al successivo aggiornamento dell'istanza (e potrebbe essere sovrascritto quando si applica un hotfix o un feature pack).
Per la configurazione e altre modifiche:
/libs
in /apps
/apps
Le query JCR sono uno strumento potente quando utilizzate correttamente. Sono appropriati per:
query reali per l’utente finale, ad esempio ricerche full-text sul contenuto.
le occasioni in cui è necessario reperire contenuti strutturati in tutto il repository.
In tali casi, accertatevi che le query vengano eseguite solo quando è assolutamente necessario, ad esempio in caso di attivazione di un componente o di annullamento della validità della cache (invece di eseguire i passaggi dei flussi di lavoro, i gestori eventi che attivano le modifiche ai contenuti, i filtri, ecc.).
Le query JCR non devono mai essere utilizzate per richieste di rendering pure. Ad esempio, le query JCR non sono adatte a
Per eseguire il rendering del contenuto, utilizzate l'accesso alla struttura del contenuto invece di eseguire una query JCR.
Se utilizzate il Generatore di query, utilizzate le query JCR, poiché Query Builder genera le query JCR sotto il cofano.
Vale anche la pena fare riferimento alla lista di controllo di sicurezza.
Utilizzate la sessione utente, non quella amministrativa. Questo significa che devi usare:
slingRequest.getResourceResolver().adaptTo(Session.class);
Lo scripting tra siti (XSS) consente agli aggressori di inserire codice nelle pagine Web visualizzate da altri utenti. Questa vulnerabilità di sicurezza può essere sfruttata da utenti Web malintenzionati per aggirare i controlli di accesso.
AEM applica il principio di filtraggio di tutti i contenuti forniti dall’utente al momento dell’output. La prevenzione di XSS viene data la massima priorità sia durante lo sviluppo che durante i test.
Inoltre, un firewall per applicazioni Web, come mod_security for Apache, può fornire un controllo centrale affidabile sulla sicurezza dell'ambiente di distribuzione e proteggere contro attacchi di script tra siti non rilevati in precedenza.
Il codice di esempio fornito con AEM potrebbe non essere di per sé protetto da tali attacchi e in genere si basa sul filtraggio delle richieste da parte di un firewall dell'applicazione Web.
Il foglio di controllo API XSS contiene informazioni che è necessario conoscere per utilizzare l'API XSS e rendere un'app AEM più sicura. Potete scaricarlo qui:
Il foglio di imbroglio XSSAPI.
Per quanto riguarda le applicazioni Internet, assicurarsi che durante il trasporto di informazioni riservate
Ciò vale per le informazioni riservate al sistema (come la configurazione o l'accesso amministrativo) e per quelle riservate agli utenti (come i loro dati personali)
Le pagine di errore possono essere personalizzate per AEM. Questo è consigliabile in modo che l'istanza non riveli tracce di utilizzo in caso di errori interni del server.
Per informazioni dettagliate, vedere Personalizzazione delle pagine di errore visualizzate dal gestore di errori.
Poiché AEM può accedere a un gran numero di file, si consiglia di configurare in modo esplicito per AEM il numero di file aperti per un processo Java.
Per ridurre al minimo questo problema, lo sviluppo dovrebbe garantire che tutti i file aperti vengano chiusi correttamente non appena (significativo) possibile.