1

我正在使用 AES 加密下面的员工类并将其保存为 sealObject 作为 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 中的密封对象?

4

1 回答 1

0

您要么必须使用相同的类/源代码,要么必须考虑一种不同的方式来编码/解码员工类。Java 总是在内部使用完整的类名。

如果您要创建一个包含Person类的(无状态)库,那么您可以在这两个服务中导入该库。Person良好的类设计可以避免类中的任何差异。


例如,您可以创建自己的序列化方法。

或者,您可以简单地加密/解密围绕该人创建的字节数组。以某种方式使用 X500 / LDAP 元素进行编码/解码是有意义的——然而,这更像是一个研究方向而不是直接答案。

最后,任何以规范方式直接编码/解码为字节的东西都符合要求,我想。

于 2020-02-03T15:14:46.863 回答