1

鉴于以下内容(从 POJO 序列化),我需要根据字段名称加密字段列表的每次出现,无论其深度如何。例如,我想加密文档的某些部分以进行存储(密码和数量)。

我已经处理了加密部分,但正在寻找一种遍历 JsonNode 的好方法,找到匹配字段的每次出现并加密/替换它。

隐藏(例如,通过@JsonIgnore 无法解决问题,因为我需要存储数据)。这是用于某些系统数据的脱机文件备份。

请注意,在我要匹配的字段(密码和数量)中,它们具有不同的类型,并且密码在不同级别出现多次。

{
  "name":"foo",
  "id":"123456",
  "password":"bar",
  "communities": [
    {
      "name":"administrators",
      "location":"xyz",
      "password":"baz"
    },
    {
      "name":"members",
      "location":"xyz",
      "password":"baz"
    }
  ],
  "quantityOrdered": 35
}

我看到的使用树模型的例子暗示了对文档结构的了解。我看到 JsonNode.getElements() 可用于获取名称的所有元素,但它只返回值,而不是键。有这方面经验的人可以推荐一个好的方法。

4

1 回答 1

0

您可以使用自定义 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);
    }
}
于 2014-03-06T13:36:22.117 回答