Шифрование и дешифрование запечатанного объекта в различных java сервисах выдает исключение classNotFoundException - PullRequest
1 голос
/ 28 января 2020

Я шифрую класс сотрудников ниже с использованием AES и сохраняю его как sealedObject как часть serviceA.

org.company.serviceA.model.employee;
class employee{
Integer ssn;
String name;
}

org.company.serviceB.model.employee;
class employee{
Integer ssn;
String name;
}

И в serviceB, когда пытаюсь расшифровать sealedObject обратно в класс employee.

employee emp = (employee) sealedObject.getObject;

Выдает ClassNotFoundException, говоря, что org.company.serviceA.model.employee не найден.

Ясно, что он пытается найти класс сотрудника ServiceA по полному имени, даже когда я создал подобный класс в serviceB.

Когда и шифрование, и дешифрование выполняются в одной и той же службе, все работает нормально. Но когда они выполняются в другом сервисе, дешифрование создает ClassNotFoundException.

Так есть ли способ преодолеть ClassNotFoundException и расшифровать запечатанный объект в serviceB?

1 Ответ

0 голосов
/ 03 февраля 2020

Вам либо придется использовать одни и те же классы / исходный код, либо вам придется подумать о другом способе кодирования / декодирования класса сотрудника. Java всегда работает с полными именами классов внутри.

Если вы создадите (без сохранения) библиотеку с классом Person, вы можете импортировать эту библиотеку в обе службы. Каких-либо различий в классе Person можно избежать с помощью хорошего дизайна класса.


Например, вы можете создать свой собственный метод сериализации.

В качестве альтернативы вы можете просто зашифровать / расшифровать байтовый массив, созданный вокруг человека. Было бы разумно как-то использовать элементы X500 / LDAP для кодирования / декодирования - однако это скорее направление исследований, чем прямой ответ.

В конце концов, любая вещь, которая напрямую кодирует / декодирует в байты в канонической форме. Я полагаю, что это будет отвечать всем требованиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...