Я реализую веб-службу RESTful, где пользователь должен отправить подписанный токен проверки вместе с запросом, чтобы я мог убедиться, что запрос не был подделан средним человеком. Моя текущая реализация такова.
Ток подтверждения - это объект VerifData, сериализованный в строку, а затем хэшированный и зашифрованный.
class VerifData {
int prop1;
int prop2;
}
В моем сервисе я помещал данные в серию в экземпляр VerifData, а затем сериализую его с помощью Jackson ObjectMapper и передавал вместе с механизмом проверки вместе с токеном проверки.
VerfiData verifData = new VerifData(12345, 67890);
ObjectMapper mapper = new ObjectMapper();
String verifCodeGenerated = mapper.writeValueAsString(verifData);
Но кажется, что каждый раз, когда запускается контейнер приложения, изменяется порядок свойств, отображаемых в ObjectMapper.
Ex: один раз это будет
{"prop1":12345,"prop2":67890}
а в другой раз это будет
{"prop2":67890,"prop1":12345}
Итак, если клиент сериализовал экземпляр VerifData, как в первую строку, существует 50% вероятность его провала, даже если это правильно.
Есть ли способ обойти это? Могу ли я указать порядок свойств для отображения ObjectMapper (например, в порядке возрастания)? Или существует какой-либо другой способ наилучшего осуществления этого этапа проверки. И клиентские, и серверные реализации разработаны мной. Я использую Java Security API для подписания и проверки.