我正在使用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 元素进行编码/解码是有意义的 - 然而,这更像是一个研究方向而不是直接答案。
最后,我想任何以规范方式直接编码/解码为字节的东西都符合要求。