Java序列化的状态( 六 )

从提出模块化序列化到应用程序能够实际使用以及使用其他序列化的新功能需要一段时间 , 但正如一句谚语所说:“种树的最佳时间是二十年前 , 其次是现在” 。

剥离Java的原生序列化功能还应该为大多数应用程序和微服务提供更好的互操作性 。 通过使用标准格式(如JSON或XML) , 开发人员可以更轻松地在使用不同语言开发的服务之间进行通信——与Java 7的二进制blob相比 , python微服务通常具有更好的读取JSON文档的集成能力 。 不过 , 虽然JSON格式简化了对象共享 , 针对Java和.NET解析器的“Friday the 13th JSON attacks”证明了银弹是不存在的( 白皮书 ) 。

在进行剥离之前 , 序列化让然保留在java.base中 。 这些技术可以降低与其他模块相关的风险 , 在序列化被模块化之后 , 仍然可以使用这些技术 。

为Apache Tomcat 8.5.31模块化JDK 10的示例

在这个示例中 , 我们将使用模块化的JRE来运行Apache Tomcat , 并移除任何不需要的JDK模块 。 我们将得到一个自定义的JRE , 它具有更小的攻击表面 , 仍然能够用于运行应用程序 。

推荐阅读