在序列化POJO时加密所选属性

时间:2019-01-03 22:04:06

标签: java json reflection jackson annotations

我正在使用Jackson将POJO序列化为JSON,然后再将它们保存到数据库中。 出于安全原因,我需要对标有@Confidential注释的属性进行加密。 需要加密的字段(属性)不必是顶级字段,并且可以深度嵌套。

例如,考虑以下POJO。该人的家庭住址年龄需要加密(它们不是“邻居”类的顶级字段)。

@Serializable 
private class Neighborhood {
   private String name;
   private Collection<Person> people;
}

@Serializable
public class Person {
   private String name;

   @Confidential
   private int age;

   @Confidential
   private Address homeAddress;
}

@Serializable
public class Address {
   private String streetAddress;
   private String city;
   private String state;
   private int zip;
}

我正在考虑编写一个用于创建字段注册表的注释处理器。该注册表将使用反射创建,并将遍历所有标有@Serializable批注的类。注册表将包含有关哪些字段需要加密以及哪些字段不需要加密的信息。

现在,在将Neighborhood POJO序列化为JSON之后,我应该能够使用JSON并在字段注册表中查找字段并进行必要的操作。但是,如果属性是集合(即列表和地图)并且通用类型信息丢失,我不知道该怎么办。

问题:

  • 是否有比我描述的方法更好和更简单的方法? 如果是,那是什么方法?

  • 如果没有更好的方法,我该如何处理集合(列表 和地图)。

此问题与Customize Jackson ObjectMapper to Read custom Annotation and mask fields annotated

不同

这是原因:

  • 我们不知道哪些类和字段将使用 @机密注释。所以不确定我如何生成所有需要的 自定义序列化程序,并向他们注册 Jackson的ObjectMapper中的SerializationModule。
  • 生成的序列化程序应该知道如何处理加密和非加密字段。
  • 不确定如何将加密客户端注入到 序列化器。

0 个答案:

没有答案