[英]Jackson Serialization excludes fields
首先,我想給你一些背景信息。
我們有一個由類 B實現的接口A。類 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-boot 應用程序。
使用的依賴項:
<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.xa 發布了對序列化的更改,但我無法找到修補小工具的具體參考。
通常,解決方法是將包含此類數據類型的類的序列化列入黑名單。 幸運的是,開發人員通常包含一個標志(如 ToS 協議),您可以指定該標志以重新啟用這些類的序列化。
不幸的是,我上一次用 Java 編程是在 5 年前——但基於快速閱讀,我想“標志”將包含某種形式的annotation decorator
或 xml 配置標簽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.