在不同 java 服务中加密和解密密封对象抛出 classNotFoundException

Encryption and decryption of sealed object in different java services throws classNotFoundException

我正在使用 AES 对下面的员工 class 进行加密,并将其保存为 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 解密回员工 class。

employee emp = (employee) sealedObject.getObject;

它抛出 ClassNotFoundException 说 org.company.serviceA.model.employee 未找到。

很明显,它试图通过完全限定名称查找 ServiceA 的员工 class,即使我在 serviceB 中创建了类似的 class。

当加密和解密在同一服务中完成时,它工作正常。但是当它们在不同的服务中完成时,解密会抛出 ClassNotFoundException。

那么有没有办法克服ClassNotFoundException,解密serviceB中的密封对象?

您要么必须使用相同的 classes/源代码,要么必须考虑使用不同的方式对员工进行编码/解码 class。 Java 始终在内部使用完整的 class 名称。

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


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

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

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