在不同 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;
}

在服务B中,当我尝试将密封对象解密回员工类时。

employee emp = (employee) sealedObject.getObject;

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

显然,它试图通过完全限定的名称找到 ServiceA 的员工类,即使我在 serviceB 中创建了一个类似的类。

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

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

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

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


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

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

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

最新更新