了解 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() 方法,在运行时为特定的反序列化流设置一个临时的过滤器。这使得开发者可以根据自己的业务需求,对反序列化进行更精细的控制
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:12:55

results matching ""

    No results matching ""