java - Instant.readObject 方法 "Defend[s] against malicious streams"是什么意思?

标签 java stream java-8 java-time

阅读 Instant 类的源代码,我碰到了这个方法

/**
 * Defend against malicious streams.
 *
 * @param s the stream to read
 * @throws InvalidObjectException always
 */
private void readObject(ObjectInputStream s) throws InvalidObjectException {
    throw new InvalidObjectException("Deserialization via serialization delegate");
}

描述让我很好奇。什么是“恶意流”?这种方法是如何防御的?

最佳答案

Instant 和其他 java.time 类使用包作用域委托(delegate) - java.time.Ser 进行序列化。查看 writeReplace 方法以了解如何创建委托(delegate)。

因此,调用 readObject 方法的唯一方法是有人传入恶意流(为尝试创建无效对象而创建的唯一目的)。该异常确保阻止此类恶意流。

一般来说,任何时候使用序列化委托(delegate)时,您都应该考虑像这样阻止 readObject

关于java - Instant.readObject 方法 "Defend[s] against malicious streams"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34222571/

相关文章:

java - 是否可以在不激活插件的情况下触发 RCP-Plugin 中的一系列操作?

java - 将 Java 程序做成独立的 exe(不用 JVM 运行)

java - 将 Unicode 字符旋转 90 度

c# - 如何防止两个线程复制方法和变量

maven - 找不到类 AWS lambda 异常

java - 将图形对象旋转 360 度

c# - 将 HttpContent 转换为 byte[]

php - 如何通过流获取标题?

java - 从 5.4 升级到 6.8.3 后如何解决 gradle tls 连接?

java - 如何在 Java 8 中使用过滤器忽略 int 数组中的值并收集