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