鉴于以下内容(从POJO序列化),我需要根据字段名称加密字段列表的每次出现,无论其深度如何。作为一个例子,我想加密文档的某些部分进行存储(密码和数量订单)。
我已经处理了加密片,但是寻找一种好的方法来遍历JsonNode,找到匹配字段的每一个匹配并加密/替换它。
隐藏(例如,通过@JsonIgnore,无法解决问题,因为我需要存储数据)。这适用于某些系统数据的脱机文件备份。
请注意,在我想要匹配的字段(passsword和quantityOrdered)中,它们的类型不同,密码会在不同级别多次出现。
{
"name":"foo",
"id":"123456",
"password":"bar",
"communities": [
{
"name":"administrators",
"location":"xyz",
"password":"baz"
},
{
"name":"members",
"location":"xyz",
"password":"baz"
}
],
"quantityOrdered": 35
}
我看到使用树模型的例子意味着知道文档的结构。我看到JsonNode.getElements()可用于获取名称的所有元素,但它只返回值,而不是键。有经验的人可以推荐一个好的方法。
答案 0 :(得分:0)
您可以使用Custom JsonFilter,并覆盖serializeAsField方法。
@Override
public void serializeAsField(Object bean, JsonGenerator jgen, SerializerProvider prov, BeanPropertyWriter writer) throws Exception {
if (writer.getName().equals("name")) {
// encrypt the value
} else {
// The property will not be filtered
writer.serializeAsField(bean, jgen, prov);
}
}