Code

Wiederverwendbare Codes

Know-how

Administrative Sessions mit AEM 6

Seit AEM 6 sind Zugriffe auf eine administrative Sessions über die Methode "loginAdministrative(null)" deprecated, seit AEM 6.3 nicht mehr möglich.

Sessions müssen seit AEM 6 über einen dedizierten Service User erstellt werden. Der folgende Beispiel Code zeigt wie:


1) System User anlegen

Zur Erstellung von Sessions wird ein System User benötigt. Dieser kann über die User Administration mit "Create System User" angelegt werden. Als User-ID kann ein Projektname verwendet werden (z.B. "projektname-service-user").

2) Konfiguration erstellen

Damit das OSGI Bundle entsprechende Berechtigungen erhält den Service User zu verwenden, muss eine Sling Konfiguration erstellt werden, in der dem Projekt Bundle (hier: "projektname.core") der Service User zugewiesen wird:

Konfiguration: org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.xml

<?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"
user.mapping="[com.adobe.granite.oauth.server=oauthservice,
projektname.core=projektname-service-user]"/>

3) Verwendung im Code

Der Zugriff auf die Session erfolgt dann über den ResourceResolver:

Map<String,Object> map = new HashMap<String, Object>();
map.put( ResourceResolverFactory.SUBSERVICE, "projektname-service-user" );
ResourceResolver resourceResolver = 
    resourceResolverFactory.getServiceResourceResolver( this.applicationServiceParams );
Session session = resourceResolver.adaptTo( Session.class );

Da die Logik vermutlich mehrfach im Projekt eingesetzt wird, ist es sinnvoll den Code Part in einen OSGI Service azuszulagern.