J'essaie de mettre à jour ma version de Jackson utilisée après le 6.4.20 JBoss patch . J'utilise org.codehause.jackson
et JBoss 6.4.x ne fournit pas de dépendances implicites pour le plus récent com.fasterxml.jackson
autant que je sache.
Est-il approprié de supposer que jackson-mapper-asl-1.9.9.redhat-6
est le package valide à utiliser pour ce correctif ? Lorsque je passe à la section noarch de l'annonce 6.4.20 , je vois codehaus-jackson-mapper-asl-1.9.9-12.redhat_6
mentionné. Est-ce que cela signifie que c'est la version recommandée? Je peux voir qu'il a été publié le 14/05/18 et que l'annonce a été faite le 15/05/18.
Actuellement, je rencontre l'erreur suivante car codehause-jackson-mapper-asl
est associé à fasterxml-jackson-databind
, ce qui me laisse penser que j'utilise une version incorrecte.
16: 01: 22,620 ERREUR [org.jboss.resteasy.resteasy_jaxrs.i18n] (http-127.0.0.1: 8080-1) RESTEASY000100: Échec de l'exécution de POST/find: org.jboss.resteasy.spi.ReaderException:
org.codehaus.jackson.map.JsonMappingException: type illégal [...] à désérialiser: empêché pour des raisons de sécurité
[...]
Causé par: org.codehaus.jackson.map.JsonMappingException: type illégal [...] à désérialiser: empêché pour des raisons de sécurité dans org.codehaus.jackson.map.deser.BeanDeserializerFactory.checkLegalTypes (BeanDeserializerFactory.Java:21)) -mapper-asl-1.9.9.redhat-6.jar: 1.9.9.redhat-6] `
Je suis récemment passé de JBoss EAP 6.3.0 à 6.4.20 et j'ai eu la même exception.
En suivant la pile d'empilement de l'exception, j'ai découvert qu'il était nécessaire de définir la propriété système jackson.deserialization.whitelist.packages
avec le nom complet de la classe que vous souhaitez désérialiser.
Si vous voulez, vous pouvez ne mettre que le suffixe du paquet. Pour plusieurs valeurs, séparez-les par une virgule. Vous pouvez le voir dans la jackson-mapper-asl-1.9.9.redhat-6.jar
classe org.codehaus.jackson.map.deser.BeanDeserializerFactory
des lignes 38 à 45.
Pour les environnements JBoss, vous pouvez définir la propriété système dans votre standalone*.xml
ou domain.xml
, comme suit:
<system-properties>
<property name="jackson.deserialization.whitelist.packages" value="br.com.myapp" />
</system-properties>
En me basant sur la réponse de @ MhagnumDw, j'ai également rencontré la même erreur avec le correctif JBoss 6.4.20 et utilisé cette solution. Voici le code source pertinent pour le code source de 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));
}
}
Vous pouvez voir que full.startsWith (iter.next ()) signifie que vous pouvez ajouter des noms de paquetages de niveau supérieur à la liste blanche. Par exemple,
<system-properties>
<property name="jackson.deserialization.whitelist.packages" value="br.com.myapp" />
</system-properties>
serait la liste blanche br.com.myapp.package.aclass
et br.com.myapp.package.bclass