Files
Sec-Interview/Chapter14/14-5.md
T
2025-09-25 03:55:13 +08:00

18 lines
1.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 了解 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()` 方法,在运行时为特定的反序列化流设置一个临时的过滤器。这使得开发者可以根据自己的业务需求,对反序列化进行更精细的控制