mar*_*uez 7 java jboss json jackson jboss6.x
我正在尝试更新我在6.4.20 JBoss补丁之后使用的Jackson版本.我正在使用org.codehause.jackson,com.fasterxml.jackson据我所知,JBoss 6.4.x并没有为新版本提供隐式依赖.
假设这jackson-mapper-asl-1.9.9.redhat-6是用于此补丁的有效包是否合适?当滚动到6.4.20公告的noarch部分时,我看到codehaus-jackson-mapper-asl-1.9.9-12.redhat_6提到了.这是否意味着这是推荐的版本?我可以看到它是在05/14/18发布的,并且公告是在05/15/18发布的.
目前,我遇到了以下错误作为codehause-jackson-mapper-asl与之关联fasterxml-jackson-databind,导致我相信我使用的版本不正确.
16:01:22,620 ERROR [org.jboss.resteasy.resteasy_jaxrs.i18n](http-127.0.0.1:8080-1)RESTEASY000100:执行POST/find失败:org.jboss.resteasy.spi.ReaderException:
org.codehaus.jackson.map.JsonMappingException:反序列化的非法类型:出于安全原因而被阻止
[...]
引起:org.codehaus.jackson.map.JsonMappingException:非法类型[...]反序列化:出于安全原因阻止org.codehaus.jackson.map.deser.BeanDeserializerFactory.checkLegalTypes(BeanDeserializerFactory.java:1521)[jackson -mapper-asl-1.9.9.redhat-6.jar:1.9.9.redhat-6]`
Mha*_*mDw 11
我最近从JBoss EAP 6.3.0升级到6.4.20并且有相同的例外.
在异常的stackstrace之后,我发现有必要jackson.deserialization.whitelist.packages使用要反序列化的类的完整类名设置系统属性.
如果你想要,你只能把包的后缀.对于多个值,请使用逗号分隔.您可以在第38到45行的jackson-mapper-asl-1.9.9.redhat-6.jar类org.codehaus.jackson.map.deser.BeanDeserializerFactory中看到这一点.
对于JBoss环境,您可以在standalone*.xml或中定义系统属性domain.xml,如下所示:
<system-properties>
<property name="jackson.deserialization.whitelist.packages" value="br.com.myapp" />
</system-properties>
Run Code Online (Sandbox Code Playgroud)
基于 @MhagnumDw 的答案,我在 JBoss 6.4.20 补丁中也遇到了同样的错误,并使用了这个解决方案。这是来自https://maven.repository.redhat.com/techpreview/all/org/codehaus/jackson/jackson-mapper-asl/1.9.9.redhat-6/jackson-mapper-asl的源代码相关源代码org.codehaus.jackson.map.deser.BeanDeserializerFactory 中的-1.9.9.redhat-6-sources.jar;
/**
* @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));
}
}
Run Code Online (Sandbox Code Playgroud)
您可以看到 full.startsWith(iter.next()) 意味着您可以将更高级别的包名称放入白名单。例如,
<system-properties>
<property name="jackson.deserialization.whitelist.packages" value="br.com.myapp" />
</system-properties>
Run Code Online (Sandbox Code Playgroud)
将列入白名单br.com.myapp.package.aclass并且br.com.myapp.package.bclass
| 归档时间: |
|
| 查看次数: |
2826 次 |
| 最近记录: |