Шифрование выбранных свойств при сериализации POJO - PullRequest
0 голосов
/ 04 января 2019

Я использую Джексона для сериализации POJO в JSON перед сохранением их в базу данных. В целях безопасности мне необходимо зашифровать свойства, помеченные аннотацией @ Confidential. Поля (свойства), которые необходимо зашифровать не обязательно должны быть полями верхнего уровня и могут быть глубоко вложенными.

Например, рассмотрим следующие POJO. homeAddress и age человека должны быть зашифрованы (они не являются полями верхнего уровня класса Neighbourhood).

@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.В реестре будет информация о том, какие поля должны быть зашифрованы, а какие нет.

Теперь, после того, как POJO Neighborhood будет сериализован в JSON, я смогу перейти к JSON и найти поля вполевой реестр и делай необходимое.Тем не менее, я не знаю, что делать, если свойства являются коллекциями (то есть списками и картами) и информация общего типа теряется.

Вопросы:

  • Есть ли лучший и более простой подход, чем тот, который я описал?Если да, что это за подход?

  • Если нет лучшего подхода, как мне обрабатывать коллекции (списки и карты).

Этот вопрос не совпадает с Настроить Jackson ObjectMapper для чтения пользовательских полей аннотации и маски с комментариями

Вот причины, по которым:

  • Мы не знаем, какиеклассы и поля будут помечены аннотацией @Confidential.Так что не уверен, как я могу сгенерировать все необходимые пользовательские сериализаторы на лету и зарегистрировать их с помощью SerializationModule в ObjectMapper Джексона.
  • Сгенерированный сериализатор должен знать, как обрабатывать как зашифрованные, так и незашифрованные поля.
  • Не уверен, как я буду вводить клиент шифрования в сериализатор.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...