Wiederverwendbare Codes
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:
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").
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]"/>
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.