### 了解 JEP290 的原理吗

JEP290 的核心原理：反序列化白名单和黑名单

JEP290 没有从根本上重写 Java 的反序列化机制，而是在现有机制之上，增加了一个过滤层（Filter）。这个过滤层在反序列化数据之前，会先对即将被实例化的类进行检查

JEP290 的核心思想可以概括为：在反序列化过程中，根据一个可配置的白名单或黑名单，来决定哪些类可以被实例化

它主要通过以下两种方式实现：

1. 全局配置：在 JVM 启动时，可以通过设置系统属性来配置一个全局的过滤规则
   - `jdk.serialFilter`：这是最主要的系统属性。它的值是一个字符串，定义了允许或拒绝反序列化的类
   - 语法：这个字符串支持简单的通配符和规则，例如：
     - `java.util.Collections.*`：允许反序列化 `java.util.Collections` 包下的所有类
     - `!org.apache.commons.collections.functors.InvokerTransformer`：禁止反序列化 `InvokerTransformer` 这个类
     - `*`：默认值，表示允许所有类
     - `;`：用于分隔多个规则
2. 编程控制：开发者可以在自己的代码中，通过 `ObjectInputStream` 类提供的 `setObjectInputFilter()` 方法，在运行时为特定的反序列化流设置一个临时的过滤器。这使得开发者可以根据自己的业务需求，对反序列化进行更精细的控制