[alibaba/fastjson]FastJSON为什么要有autoType功能

2024-05-22 520 views
6

看了一些关于autoType的介绍,有一些疑问。 autoType可以把{"@type":"java.util.LinkedHashMap","barcode":"510998715202072226598","storeId":"20122707"} 这样的直接反序列化成LinkedHashMap类型,引入autoType只是为了这个功能吗?还有没有其他autoType的使用场景,即使是@type这样的,个人感觉平时用的也不多; FastJSON应该在很早版本就有autoType了,当时是为了解决什么问题引入的,没有替代方法吗,毕竟autoType带来这么多安全漏洞。 请各位大佬赐教。

回答

4

autoType是有很明确需求的,没有autoType就不能做到完整的反序列化支持。jackson也引入了autotype类似的功能PolymorphicDeserialization,和fastjson采用了类似关键字 @class

0

autoType是有很明确需求的,没有autoType就不能做到完整的反序列化支持。jackson也引入了autotype类似的功能PolymorphicDeserialization,和fastjson采用了类似关键字 @Class

感谢回答! 有明确需求这个能否再详细说下,具体哪些使用场景呢? 如果只是用到VO和JSON String之间的序列化/反序列化,是否可以开启safeMode使得autoType完全失效,会不会存在对autoType的隐式调用从而引发bug。 谢谢!

1

autoType是有很明确需求的,没有autoType就不能做到完整的反序列化支持。jackson也引入了autotype类似的功能PolymorphicDeserialization,和fastjson采用了类似关键字 @Class

温少,fastjson 这块的文档哪里有呢.

看了你说的jackson这个特性:https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization

大概是为了解决多态的反序列化场景问题. 然后搜了下gson,发现没有类似的安全问题,是需要用户自己引入实现类的 是不是这种方式更加安全一些.

9

autoType是有很明确需求的,没有autoType就不能做到完整的反序列化支持。jackson也引入了autotype类似的功能PolymorphicDeserialization,和fastjson采用了类似关键字 @Class

感谢回答! 有明确需求这个能否再详细说下,具体哪些使用场景呢? 如果只是用到VO和JSON String之间的序列化/反序列化,是否可以开启safeMode使得autoType完全失效,会不会存在对autoType的隐式调用从而引发bug。 谢谢!

比如把一个对象序列化成另一个,之后在反序列化成原来的类型,如果你自己在代码中指定了反序列化对应的类型自然没问题,但如果是类型是动态的,不能再代码中写死的话,那autoType这个功能无疑是很有用的,只是要处理好不出漏洞可能比较麻烦

1

autoType是有很明确需求的,没有autoType就不能做到完整的反序列化支持。jackson也引入了autotype类似的功能PolymorphicDeserialization,和fastjson采用了类似关键字 @Class

感谢回答! 有明确需求这个能否再详细说下,具体哪些使用场景呢? 如果只是用到VO和JSON String之间的序列化/反序列化,是否可以开启safeMode使得autoType完全失效,会不会存在对autoType的隐式调用从而引发bug。 谢谢!

比如把一个对象序列化成另一个,之后在反序列化成原来的类型,如果你自己在代码中指定了反序列化对应的类型自然没问题,但如果是类型是动态的,不能再代码中写死的话,那autoType这个功能无疑是很有用的,只是要处理好不出漏洞可能比较麻烦

@walkertest 对于单元测试非常有用 ☀️机器学习单元测试平台,零代码、全方位、自动化 测试 方法/函数 的正确性和可用性。 https://github.com/TommyLemon/UnitAuto image image image

@wenshao 目前 UnitAuto 强依赖 fastjson 的 TypeUtils.cast 及 Auto Type @type,温少可别去掉这个功能哈