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

Я шифрую класс сотрудников ниже, используя 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 emp = (employee) sealedObject.getObject;

Он вызывает исключение ClassNotFoundException, в котором говорится, что org.company.serviceA.model.employee не найден.

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

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

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


person Shrihari    schedule 28.01.2020    source источник


Ответы (1)


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

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


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

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

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

person Maarten Bodewes    schedule 03.02.2020