JBoss 6.4.20 补丁中允许使用哪些版本的杰克逊?



我正在尝试更新我在 6.4.20 JBoss 补丁之后使用的杰克逊版本。我正在使用org.codehause.jackson,据我所知,JBoss 6.4.x 没有为较新的com.fasterxml.jackson提供隐式依赖项。

假设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-aslfasterxml-jackson-databind相关联,导致我相信我使用的是不正确的版本。

16:01:22,620 错误 [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] `

我最近从 JBoss EAP 6.3.0 升级到 6.4.20,遇到了同样的异常。

在异常的堆栈跟踪之后,我发现有必要使用要反序列化的类的完整类名设置系统属性jackson.deserialization.whitelist.packages

如果需要,可以只放置包的后缀。对于多个值,请用逗号分隔。您可以在第 38 行到 45 行的jackson-mapper-asl-1.9.9.redhat-6.jarorg.codehaus.jackson.map.deser.BeanDeserializerFactory中看到这一点。

对于 JBoss 环境,您可以在standalone*.xmldomain.xml中定义系统属性,如下所示:

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

基于@MhagnumDw的回答,我在 JBoss 6.4.20 补丁中也遇到了同样的错误,并使用了这个解决方案。这是来自org.codehaus.jackson.map.deser.BeanDeserializerFactory中 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 的源代码相关源代码;

/**
* @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));
}
}

您可以看到 full.startsWith(iter.next((( 意味着您可以将更高级别的软件包名称放入白名单。例如

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

br.com.myapp.package.aclassbr.com.myapp.package.bclass列入白名单

最新更新