AEM 6.4 heeft het einde van de uitgebreide ondersteuning bereikt en deze documentatie wordt niet meer bijgewerkt. Raadpleeg voor meer informatie onze technische ondersteuningsperioden. Ondersteunde versies zoeken hier.
AEM componenten en sjablonen vormen een zeer krachtige toolkit. Ze kunnen door ontwikkelaars worden gebruikt om zakelijke gebruikers, editors en beheerders van websites de functionaliteit te bieden om hun websites aan te passen aan veranderende bedrijfsbehoeften (inhouds-behendigheid) terwijl de uniforme lay-out van de sites behouden blijft (merkbescherming).
Een typische uitdaging voor een persoon verantwoordelijk voor een website, of reeks websites (bijvoorbeeld in een bijkantoor van een globale onderneming), is een nieuw type van inhoudspresentatie op hun websites te introduceren.
Laten we ervan uitgaan dat er een nieuwsbrief moet worden toegevoegd aan de websites, waarin uittreksels uit andere artikelen staan die al zijn gepubliceerd. De pagina moet hetzelfde ontwerp en dezelfde structuur hebben als de rest van de website.
De aanbevolen manier om een dergelijke uitdaging aan te gaan is:
Dit illustreert hoe deze benadering de bijdragende gebruikers en beheerders van de website machtigt om snel aan bedrijfsbehoeften te antwoorden, zonder de betrokkenheid van ontwikkelingsteams te vereisen. Alternatieve methodes, zoals het creëren van een nieuw malplaatje, zijn gewoonlijk een dure oefening, die een veranderingsbeheersproces en betrokkenheid van het ontwikkelingsteam vereist. Dit maakt het hele proces veel langer en kostbaar.
De ontwikkelaars van op AEM gebaseerde systemen moeten daarom gebruik maken van:
De volgende algemene regels voor ontwikkelaars zijn in de meeste gebruikelijke projecten zinvol:
Wanneer u uw eigen componenten maakt of een bestaande component aanpast, is het vaak het eenvoudigst (en veiligst) om bestaande definities opnieuw te gebruiken. Dezelfde beginselen gelden ook voor andere elementen binnen AEM, bijvoorbeeld de fouthandler.
Dit kan worden gedaan door de bestaande definitie te kopiëren en te bedekken. Met andere woorden, het kopiëren van de definitie uit /libs
tot /apps/<your-project>
. Deze nieuwe definitie, in /apps
, kan worden bijgewerkt naar wens.
Zie Bedekkingen gebruiken voor meer informatie .
Bijvoorbeeld:
Hiervoor moest een componentdefinitie worden bedekt:
Een nieuwe componentmap maken in /apps/<website-name>/components/<MyComponent>
door een bestaande component te kopiëren:
Bijvoorbeeld om het de componentenexemplaar van de Tekst aan te passen:
/libs/foundation/components/text
/apps/myProject/components/text
Pagina's aanpassen die worden weergegeven door de fouthandler
In dit geval wordt een servlet bedekt:
Kopieer het standaardscript of de standaardscripts in de gegevensopslagruimte:
/libs/sling/servlet/errorhandler/
/apps/sling/servlet/errorhandler/
U mogen om het even wat in /libs
pad.
Dit komt omdat de inhoud van /libs
wordt de volgende keer overschreven wanneer u een upgrade uitvoert van uw exemplaar (en kan worden overschreven wanneer u een hotfix- of functiepakket toepast).
Voor configuratie en andere wijzigingen:
/libs
tot /apps
/apps
JCR-query's zijn een krachtig hulpmiddel als ze correct worden uitgevoerd. Zij zijn geschikt voor:
echte eindgebruikervragen, zoals fullText onderzoeken op inhoud.
gevallen waarin gestructureerde inhoud moet worden gevonden in de gehele gegevensopslagruimte.
In dergelijke gevallen moet u ervoor zorgen dat query's alleen worden uitgevoerd wanneer dit absoluut vereist is, bijvoorbeeld bij componentactivering of cachevalidatie (in tegenstelling tot bijvoorbeeld Workflows Stappen, Gebeurtenishandlers die worden geactiveerd bij inhoudswijzigingen, Filters, enz.).
JCR-query's mogen nooit worden gebruikt voor pure renderingaanvragen. JCR-query's zijn bijvoorbeeld niet geschikt voor
Gebruik voor het renderen van inhoud navigatie-toegang tot de inhoudsstructuur in plaats van een JCR-query uit te voeren.
Als u het Query BuilderU kunt ook JCR-query's gebruiken terwijl de Query Builder JCR-query's onder de kap genereert.
Het is ook de moeite waard te verwijzen naar de beveiligingscontrolelijst.
Gebruik de gebruikerssessie, niet de beheersessie. Dit betekent dat u het volgende moet gebruiken:
slingRequest.getResourceResolver().adaptTo(Session.class);
Met XSS (Cross-site scripting) kunnen aanvallers code injecteren in webpagina's die door andere gebruikers worden weergegeven. Deze kwetsbaarheid op het gebied van beveiliging kan door kwaadaardige webgebruikers worden misbruikt om toegangsbesturingselementen te omzeilen.
AEM past het beginsel toe van het filtreren van alle gebruiker-geleverde inhoud op output. Het voorkomen van XSS krijgt de hoogste prioriteit tijdens zowel ontwikkeling als testen.
Daarnaast is er een webtoepassingsfirewall, zoals mod_security voor Apache, kan betrouwbare, centrale controle over de veiligheid van het plaatsingsmilieu verstrekken en tegen eerder onontdekte dwars-plaats scripting aanvallen beschermen.
De voorbeeldcode van AEM kan niet zelf tegen dergelijke aanvallen beschermen en baseert zich over het algemeen op verzoek het filtreren door een firewall van de Webtoepassing.
Het XSS API-taakblad bevat informatie die u moet weten om de XSS API te kunnen gebruiken en een AEM app veiliger te maken. U kunt het hier downloaden:
Het XSSAPI-controleblad.
Bij elke internettoepassing moet u ervoor zorgen dat bij het vervoer van vertrouwelijke informatie
Dit geldt voor informatie die vertrouwelijk is voor het systeem (zoals configuratie of administratieve toegang) en voor informatie die vertrouwelijk is voor de gebruikers (zoals hun persoonlijke gegevens).
Foutpagina's kunnen voor AEM worden aangepast. Dit is aan te raden, zodat de instantie geen bewegingssporen weergeeft bij interne serverfouten.
Zie Foutpagina's aanpassen die worden weergegeven door de foutafhandeling voor volledige informatie.
Omdat AEM toegang heeft tot een groot aantal bestanden, wordt aanbevolen het aantal bestanden openen voor een Java-proces uitdrukkelijk worden gevormd voor AEM.
Om dit probleem tot een minimum te beperken, moet de ontwikkeling ervoor zorgen dat geopende bestanden zo snel (zinvol) mogelijk correct worden gesloten.