webentwicklung-frage-antwort-db.com.de

Welche Versionen von Jackson sind in Patch JBoss 6.4.20 zulässig?

Ich versuche, meine Version von Jackson zu aktualisieren, die nach dem JBoss-Patch 6.4.20 verwendet wird. Ich verwende org.codehause.jackson, und JBoss 6.4.x bietet keine impliziten Abhängigkeiten für den neueren com.fasterxml.jackson, soweit ich weiß. 

Ist es angemessen anzunehmen, dass jackson-mapper-asl-1.9.9.redhat-6 das gültige Paket ist, das für diesen Patch verwendet werden soll? Wenn ich zum noarch-Abschnitt der Ankündigung 6.4.20 scrolle, sehe ich codehaus-jackson-mapper-asl-1.9.9-12.redhat_6. Bedeutet das, dass dies die empfohlene Version ist? Ich kann sehen, dass es am 14.05.18 veröffentlicht wurde und die Ankündigung am 15.05.18 gemacht wurde.

Momentan tritt der folgende Fehler auf, da codehause-jackson-mapper-asl mit fasterxml-jackson-databind verknüpft ist, was mich zu der Annahme führt, dass ich die falsche Version verwende.

16: 01: 22,620 ERROR [org.jboss.resteasy.resteasy_jaxrs.i18n] (http-127.0.0.1: 8080-1) RESTEASY000100: Fehler beim Ausführen von POST/find: org.jboss.resteasy.spea.ReaderException: 

org.codehaus.jackson.map.JsonMappingException: Unzulässiger [...] zu deserialisierender Typ: Aus Sicherheitsgründen verhindert

[...]

Verursacht durch: org.codehaus.jackson.map.JsonMappingException: Unzulässiger [...] Deserialisierungstyp: Aus Sicherheitsgründen unter org.codehaus.jackson.map.deser.BeanDeserializerFactory.checkLegalTypes (BeanDeserializerFactory.Java:1521) verhindert -mapper-asl-1.9.9.redhat-6.jar: 1.9.9.redhat-6] `

6
marco dominguez

Ich habe kürzlich ein Upgrade von JBoss EAP 6.3.0 auf 6.4.20 durchgeführt und hatte die gleiche Ausnahme.

Nach der Stackstrace der Ausnahme entdeckte ich, dass es erforderlich ist, die Systemeigenschaft jackson.deserialization.whitelist.packages mit dem vollständigen Klassennamen der Klassen festzulegen, die Sie deserialisieren möchten.

Wenn Sie möchten, können Sie nur das Suffix des Pakets eingeben. Bei mehreren Werten trennen Sie diese durch Komma. Sie können dies in der jackson-mapper-asl-1.9.9.redhat-6.jar-Klasse org.codehaus.jackson.map.deser.BeanDeserializerFactory der Zeilen 38 bis 45 sehen.

Für JBoss-Umgebungen können Sie die Systemeigenschaft in Ihrem standalone*.xml oder domain.xml wie folgt definieren:

<system-properties>
    <property name="jackson.deserialization.whitelist.packages" value="br.com.myapp" />
</system-properties>
6
MhagnumDw

Aufbauend auf der Antwort von @ MhagnumDw stieß ich mit dem Patch JBoss 6.4.20 auf den gleichen Fehler und verwendete diese Lösung. Hier ist der Quellcode-relevante Quellcode von https://maven.repository.redhat.com/techpreview/all/org/codehaus/jackson/jackson-mapper-asl/1.9.9.redhat-6/jackson-mapper -asl-1.9.9.redhat-6-sources.jar in org.codehaus.jackson.map.deser.BeanDeserializerFactory;

/**
     * @since 1.9.9.redhat-5
     */
protected void checkLegalTypes(DeserializationConfig config, JavaType type,
        BeanDescription beanDesc)
    throws JsonMappingException
{
    // There are certain nasty classes that could cause problems, mostly
    // via default typing -- catch them here.
    String full = type.getRawClass().getName();

    Iterator<String> iter = _cfgLegalPackageNames.iterator();

    boolean pass = false;

    while(iter.hasNext()) {
        if(full.startsWith(iter.next())) {
            pass = true;
            break;
        }
    }

    if(!pass) {
        throw new JsonMappingException(
                                  String.format("Illegal type (%s) to deserialize: prevented for security reasons", full));
    }
}

Sie können sehen, dass full.startsWith (iter.next ()) bedeutet, dass Sie Paketnamen höherer Ebenen in die Whitelist aufnehmen können. Zum Beispiel,

<system-properties>
    <property name="jackson.deserialization.whitelist.packages" value="br.com.myapp" />
</system-properties>

würde Whitelist br.com.myapp.package.aclass und br.com.myapp.package.bclass

0
leontp587