Jackson Serialization排除字段



首先我想给你们一些背景。

有一个接口A类b实现。B类抽象类C.

我们通常在调用请求时(rest GET端点)返回的是B中的值和构成层次结构(D扩展B等等)的所有类中的值。

B包含getter来访问这些值。这些getter在A接口中没有定义。但是响应可以工作,值被转换成JSON,所以到目前为止没有问题。Jackson能够调用getter并基于它们创建JSON

现在我们正在将Jackson从2.6.7升级到更新的版本。我们尝试了2.10.3和更高版本。

问题是这些getter不再被序列化. 如果我们在接口中定义它们是可以的,但是在我们的上下文中这样做的风险很高。

有人知道为什么在新版本的Jackson中,没有在接口中定义的getter会被忽略吗?是否存在配置,调整或其他可以强制其先前行为的东西?

后编辑1

重要的是要注意对象是如何创建的接口A obj = new Class C()或从层次结构中需要的任何一个;

后编辑2

也许它还有助于提供Spring从4.0.0版本更新到5.3.0的信息。应用程序使用Spring-mvc, Spring-core,这是一个非spring引导的应用程序。

使用的依赖项:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${com.fasterxml.jackson.databind}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${com.fasterxml.jackson.databind}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>${com.fasterxml.jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${com.fasterxml.jackson.version}</version>
</dependency>

自2018年左右以来,利用真实性中的序列化验证限制被滥用并导致漏洞补丁。这些被称为"序列化小工具";但是当漏洞报告进入公众视野时,许多不同的序列化框架和库,包括Jackson,已经与他们的安装程序一起发布了捆绑包。

对于Java -一些可能被利用的数据类型的例子可能是:

java.lang.Object
java.io.Serializable
java.util.Comparable

Jackson - 2.10左右。x发布了对序列化的更改,但我无法找到修补gadget的具体参考。

典型的解决方法是将包含此类数据类型的类的序列化列入黑名单。幸运的是,开发人员通常包含一个标志(如ToS协议),您可以指定它来重新启用这些类的序列化。

不幸的是,我最后一次用Java编程是在5年前——但基于快速阅读,我想象了"标志"。将包括某种形式的annotation decorator或xml配置标签。