La serialización predeterminada en Java tiene algunos problemas de seguridad. Por ejemplo, los bytes después de la serialización del objeto se transmiten a través de la red y pueden ser interceptados en la red. Cómo garantizar la seguridad de los datos Por lo general, el contenido del objeto se puede cifrar cuando el objeto se serializa y descifrar cuando se deserializa el objeto.
Análisis específico del proceso de realización:
- Agregue el método writeObject (ObjectOutpuStream out) al objeto serializado para cifrar el contenido y luego realizar la serialización.
- Agregue el método readObject (ObjectInputStream in) al objeto serializado para deserializar el contenido primero y luego realice la operación de descifrado
Código:
class SysLog implements Serializable{
private static final long serialVersionUID = -5296788134693797316L;
/**日志id*/
private Integer id;
/**操作用户*/
private String username;
//private Date createdTime;
/**此方法会在调用对象流的的writeObject方法时执行*/
private void writeObject(ObjectOutputStream out) throws IOException{
//1.获取一个加密对象(java.util)
Base64.Encoder encoder=Base64.getEncoder();
//2.对内容进行加密
byte[] array=encoder.encode(username.getBytes());
//3.将加密结果重新赋值给username
username=new String(array);
//4.执行默认序列化
out.defaultWriteObject();//序列化
}//方法的声明是一种规范
private void readObject(ObjectInputStream in)
throws IOException, ClassNotFoundException{
//1.执行默认反序列化
in.defaultReadObject();
//2.获取解密对象
Base64.Decoder decoder=Base64.getDecoder();
//3.执行解密操作
byte[] array=decoder.decode(username);
username=new String(array);
}
public void setId(Integer id) {
this.id = id;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "SysLog [id=" + id + ", username=" + username + "]";
}
}
Descripción: método writeObject / readObject:
- El modificador de acceso, el tipo de valor de retorno, el nombre del método y los parámetros deben ser los mismos que el código anterior (definido en la especificación de Java)
- Los dos métodos serán llamados por la capa inferior del sistema a través de la reflexión durante la serialización y deserialización .