我有两个简单的应用程序:客户端和服务器。客户端加密(简单 AES)自定义对象并通过 TCP 套接字将其作为字节发送到服务器。服务器解密这些字节并调用重新创建此对象的方法,如下所示:
private static Object getObjectFromBytes(byte[] credentials) throws IOException, ClassNotFoundException{
ByteArrayInputStream bis = new ByteArrayInputStream(credentials);
ObjectInput in = null;
Object credentialsObj = null;
try {
in = new ObjectInputStream(bis);
credentialsObj = in.readObject();
} finally {
bis.close();
in.close();
}
return credentialsObj;
}
在客户端,当我加密这个对象时,它的类型是mds.hm5.client.ITU_Credentials
. 在服务器端,当我解密它并转换回对象时,它应该是mds.hm5.tokenservice.ITU_Credentials
. 相反,我得到以下异常:
java.lang.ClassNotFoundException: mds.hm5.client.ITU_Credentials
他正在通过旧的类路径寻找这个对象。为什么会发生,我应该如何解决?
附加信息:
这是我在客户端将此对象转换为字节数组的方法:
private static byte[] getBytesFromObject(Object credentials) throws IOException{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = null;
byte[] newBytes = null;
try {
out = new ObjectOutputStream(bos);
out.writeObject(credentials);
newBytes = bos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
} finally {
out.close();
bos.close();
}
return newBytes;
}
我使用泛型类型的原因Object
是因为我将使用这些方法来转换/加密/解密多种类型。这是正确的方法吗?