我在下面使用AES加密员工类,并将其另存为sealA作为serviceA的一部分。
org.company.serviceA.model.employee;
class employee{
Integer ssn;
String name;
}
org.company.serviceB.model.employee;
class employee{
Integer ssn;
String name;
}
在serviceB中,当我尝试将密封对象解密回员工类时。
employee emp = (employee) sealedObject.getObject;
它抛出ClassNotFoundException,表示未找到org.company.serviceA.model.employee。
显然,即使我已经在serviceB中创建了类似的类,它也在尝试通过完全限定的名称查找ServiceA的雇员类。
当加密和解密都在同一服务中完成时,它可以正常工作。但是,当它们在不同的服务中完成时,解密将引发ClassNotFoundException。
那么有没有办法克服ClassNotFoundException并解密serviceB中的密封对象?
最佳答案
您要么必须使用相同的类/源代码,要么必须考虑采用不同的方式来编码/解码员工类。 Java始终在内部使用完整的类名。
如果要创建一个带有Person
类的(无状态)库,则可以将该库导入两个服务中。通过良好的类设计可以避免Person
类中的任何差异。
例如,您可以创建自己的序列化方法。
或者,您可以简单地加密/解密围绕人创建的字节数组。以某种方式将X500 / LDAP元素用于编码/解码将是有意义的-但是,这比直接回答更是研究方向。
最后,我想任何以规范的方式直接将字节编码/解码的东西都符合要求。