- 博客(13)
- 收藏
- 关注
原创 Fastjson源码分析—1.2.24漏洞分析
2021SC@SDUSC前面的文章中已经分析了Fastjson反序列化的相关代码,涉及的方面很多、覆盖面也很全。可以看到,Fastjson是一款非常好的Json字符串反序列化工具,高效、简洁、无依赖、可定制。然而,高效的Json解析也给它带来了风险,最大的问题莫过于几年前爆出的1.2.24版本的远程代码执行漏洞,该漏洞现在已经修复,本篇文章将分析这个漏洞产生的原因,复现方式以及解决方案,还尝试从工具开发者的角度探讨如何避免此类漏洞的发生。目录漏洞复现产生原因技术背景代码分析解决方案如何避免此类问题发生
2021-12-23 22:02:24 2806
原创 Fastjson源码分析—DefaultJSONParser的作用和实现
2021SC@SDUSCDefaultJSONParser本质上是一个反序列化组合器,集成了Feature,LexerBase,ParserConfig等的实例,这些都在前文中有提及。这篇文章主要介绍DefaultJSONParser提供的一些方法,了解它在FastJSON反序列化过程中的作用机制和原理。目录构造方法介绍public void acceptType(String typeName)接收类型public void parseArray(Type type, Collection array
2021-12-16 16:59:04 2051
原创 Fastjson源码分析—内部注册类型的反序列化
2021SC@SDUSCFastjson原生支持大多数工程中常用类型的反序列化,这一特性让Fastjson在众多json库中脱颖而出。除了最基本的类型外,Fastjson还自带SimpleDateFormat、Calendar、StringBuffer、BigDecimal和UUID等不那么常见但是很有用处的类型的反序列化。本章尝试从几个稍复杂的类型入手,探讨Fastjson如何对内部注册类型进行反序列化。目录TimeDeserializerMapDeserializerToken类型及规律支持的内部注
2021-12-08 17:30:13 662
原创 Fastjson源码分析—JSONPath解析
2021SC@SDUSC目录JSONPathJSONPath的定义JSONPath的语法JSONPath在Fastjson中的使用JSONPath代码解析总结JSONPathJSONPath的定义正如XPath对XML的解析一样,JSONPath的定义,简单说来,就是对JSON文档的一种解析。通过JSONPath可以轻松的对JSON文档获取指定“路径”的数据,在繁杂的、肉眼难以阅读的json字符串中精准找到需要的部分。JSONPath的语法$表示文档的根元素@表示文档的当前元素.node_
2021-11-30 21:39:09 4564
原创 Fastjson源码分析—JSONReader的使用和原理
2021SC@SDUSC目录JSONReader使用方法JSONReader源码分析startArray方法readStringJSONReader性能测试Gson测试代码:Gson内存和cpu占用情况FastJSON测试代码FastJSON内存和cpu占用情况总结前面几篇文章分析的都是Fastjson对于少量json字符串的反序列化。我们不需要考虑内存的消耗,也难以察觉出Fastjson性能上的优越。但是当数据量庞大时,单纯的使用JSON.parseObject会产生严重问题,最明显的就是内存溢出。
2021-11-24 15:20:33 4865 1
原创 Fastjson源码分析—ParserConfig的作用及原理(2)
2021SC@SDUSC上一篇我们分析了ParserConfig的使用方法、关键变量的含义以及checkAutoType方法ConfigFromPropety方法的解析,这篇文章我们继续分析ParserConfig的另外几个关键方法,深度了解它的作用原理。目录getDeserializer(Type type)createJavaBeanDeserializerinitJavaBeanDeserializers总结getDeserializer(Type type)该方法用于获取指定类型的反序列化器
2021-11-15 21:32:46 2896
原创 Fastjson源码分析—ParserConfig的作用及原理(1)
使用Fastjson进行反序列化时,我们总希望能够对反序列化的过程进行一个定制,有时候这种定制我们希望是临时的,有时希望是全局的。之前提到过我们可以通过feature参数对反序列化的属性进行定制,包括是否允许使用大括号、是否允许多重逗号等。今天谈一下ParserConfig类,它拥有比feature更强大的功能,从更高的角度对反序列化过程进行控制,支持全局定制,也可以进对某一次反序列化改变其默认的行为。下面开始分析。目录ParserConfig的使用ParserConfig的变量及含义ParserConf
2021-11-08 21:04:39 8999
原创 Fastjson源码分析—ASM的作用和实现(1)
2021SC@SDUSC众所周知,所有json解析工具中,Fastjson速度是最快的。而它能够快速对json字符串进行处理的原因之一,便是它使用了ASM框架。目录ASM是什么ASM的使用方法ASM在Fastjson中的实现ASM是什么首先,我们把关注点放在ASM的定义上。ASM的使用方法ASM在Fastjson中的实现...
2021-10-26 11:19:52 1867
原创 Fastjson源码分析—反序列化—Feature的功能和实现
2021SC@SDUSCFeature的功能和实现当我们对json字符串进行反序列化时,有时并不想完全按照json字符串默认的规则生成相应的Java对象,而有时我们手中的字符串亦不符合json字符串的格式,无法按照原有的规则进行解析。这时,我们需要修改反序列化的默认解析规则,而Fastjson恰好提供了这一功能。使用Fastjson进行反序列化的时候,有一个可选的参数features,用于对反序列化的过程和结果进行定制化。Feature的取值表示先看看这几个重载方法:public static
2021-10-20 22:15:33 5560 1
原创 Fastjson源码分析—反序列化—Token的定义和解析(2)
2021SC@SDUSC上篇分析了Token的定义和解析Token的大致过程,着重讲解了分析过程的顶层实现。这篇重点讲解底层代码,看看对json字符串进行分割时底层具体发生了什么。skipComment()跳过注释接上篇分析,扫描json字符串时,如果遇到’/’,将判定该段Token类型为注释,跳过这一段。 protected void skipComment() { next(); if (ch == '/') { for (;;) {
2021-10-12 21:33:42 469
原创 Fastjson源码分析—反序列化—Token的定义和解析(1)
021SC@SDUSC深度解析Fastjson中的TokenToken定义Token类型解析JSONLexerBase成员变量JSONLexerBase解析方法Token定义Token是Fastjson中定义的json字符串的同类型字段,即"{"、"["、数字、字符串等,用于分隔json字符串不同字段。例如,{“姓名”:“张三”,“年龄”:“20”}是一个json字符串,在反序列化之前,需要先将其解析为{ 、 姓名、 :、 张三、 ,、 年龄、 :、 20、 }这些字段的Token流,随后再
2021-10-06 20:11:48 1296 1
原创 Fastjson源码分析综述
Fastjson源码分析综述2021SC目录项目描述Fastjson简介特点与其他json处理器的对比关键源码组内分工我的工作分析方式项目描述Fastjson简介Fastjson是alibaba开源的一套json处理器,可以将 Java 对象转换为 JSON 格式,也可以将 JSON 字符串转换为 Java 对象。提供了 toJSONString() 和 parseObject() 方法来将 Java 对象与 JSON 相互转换。调用toJSONString方 法即可将对象转换成 JSON 字符串
2021-09-28 20:34:32 795
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人