Zuletzt aktualisiert am
1. Mai 2021
Problem
Nach der Aktualisierung auf AEM 6.2 oder eine neuere Version fällt die Anwendung aus, mit der Fehlermeldung „Deserialisierung für die Klasse nicht zulässig“ (siehe Beispiel unten).
java.lang.UnsupportedOperationException: Deserialization not allowed for class net.sf.ehcache.Element (on Thu Sep 21 12:29:55 CDT 2017) at org.kantega.notsoserial.DefaultNotSoSerial.preventDeserialization(DefaultNotSoSerial.java:256) at org.kantega.notsoserial.DefaultNotSoSerial.onBeforeResolveClass(DefaultNotSoSerial.java:248) at org.kantega.notsoserial.ObjectInputStreamClassVisitor.onBeforeResolveClass(ObjectInputStreamClassVisitor.java:48) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1613) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371) at net.sf.ehcache.store.disk.DiskStorageFactory.read(DiskStorageFactory.java:370) at net.sf.ehcache.store.disk.DiskStorageFactory.retrieve(DiskStorageFactory.java:886) at net.sf.ehcache.store.disk.Segment.decode(Segment.java:172) at net.sf.ehcache.store.disk.Segment.put(Segment.java:449) at net.sf.ehcache.store.disk.DiskStore.put(DiskStore.java:438) at net.sf.ehcache.store.FrontEndCacheTier.put(FrontEndCacheTier.java:267) at net.sf.ehcache.Cache.putInternal(Cache.java:1455) at net.sf.ehcache.Cache.put(Cache.java:1383) at net.sf.ehcache.Cache.put(Cache.java:1348)
Umgebung
AEM 6.2 und neuere Versionen.
Ursache
Dies wird durch den Nososerial Security Fix verursacht, der auf AEM angewandt wird. Um den Fehler zu beheben, können Sie bestimmte Java-Klassen, die Deserialisierung zulassen, auf die Whitelist setzen.
Eine Whitelist-Datei hinzufügen, indem Sie diesen JVM-Parameter hinzufügen:
-Dnotsoserial.whitelist=is-deserialized.txt
Lösung
-javaagent:notsoserial.jar -Dnotsoserial.whitelist=empty.txt -Dnotsoserial.dryrun=is-deserialized.txt