监控jdk中的反序列化活动 – Inside.java


许多Java框架依靠序列化和反序列化来在不同计算机上的JVM之间交换消息,或将数据持久化到磁盘上。监视反序列化对使用此类框架的应用程序开发人员很有帮助,因为它可以洞察应用程序的底层反序列化要求。这种见解有助于配置序列化筛选,这是Java 9中引入的一种机制,可通过在传入数据到达应用程序之前对其进行筛选来防止漏洞。框架开发人员还可以受益于更有效和动态的方式来监视其框架执行的反序列化活动。
不幸的是,监视反序列化很困难,因为它需要Java类库如何执行反序列化的高级知识。例如,您将不得不使用诸如调试或检测对中方法的调用之类的易碎技术java.io.ObjectInputStream。更好的方法是使用JDK Flight Recorder(JFR),这是一种低开销的数据收集框架,用于对Java应用程序和Oracle在Java 11中开源的HotSpot JVM进行故障排除。从Java 17开始,JFR对反序列化提供了一流的支持,通过反序列化操作触发的新反序列化事件。您可以将JFR与JDK Mission Control(JMC)之类的工具一起使用,以通过以下方式识别对象的反序列化ObjectInputStream。这样,可以识别特定类的对象的反序列化,或者监视未配置序列化过滤器的反序列化操作,甚至监视过滤器拒绝或允许的操作。
本文介绍了新的反序列化事件,描述了如何启用它,最后描述了如何利用它来深入了解正在运行的JVM中发生的反序列化操作。
Java 17中添加了反序列化事件,该事件允许监视和检查由平台的序列化API(即)执行的所有反序列化操作ObjectInputStream。在启用反序列化事件的情况下进行记录可以回答以下问题:是否使用已配置的过滤器进行所有反序列化操作,或者Foo该类是否有任何反序列化操作,或者在给定的时间内拒绝了多少反序列化操作。
反序列化事件是一个JFR事件,因此可以由JDK Mission ControlAdvanced Management Console之类的工具使用,以动态监视和检查正在运行的JVM或远程系统上多个JVM中感兴趣的反序列化操作。
上面概述的完整源代码可以在这里找到。
详细点击标题见原文。