fastjson解析异常 autoType is not support

fastjson解析异常 autoType is not support

异常信息:

1
2
3
4
5
6
7
8
9
10
11
com.alibaba.fastjson.JSONException: autoType is not support. me.chanjar.weixin.mp.bean.result.WxMpUser
at com.alibaba.fastjson.parser.ParserConfig.checkAutoType(ParserConfig.java:1026) ~[fastjson-1.2.47.jar:na]
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:316) ~[fastjson-1.2.47.jar:na]
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1356) ~[fastjson-1.2.47.jar:na]
at com.alibaba.fastjson.parser.deserializer.JavaObjectDeserializer.deserialze(JavaObjectDeserializer.java:45) ~[fastjson-1.2.47.jar:na]
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:661) ~[fastjson-1.2.47.jar:na]
at com.alibaba.fastjson.JSON.parseObject(JSON.java:365) ~[fastjson-1.2.47.jar:na]
at com.alibaba.fastjson.JSON.parseObject(JSON.java:269) ~[fastjson-1.2.47.jar:na]
at com.alibaba.fastjson.JSON.parseObject(JSON.java:488) ~[fastjson-1.2.47.jar:na]

省略。。。。

原因就是使用fastjson的时候:序列化时将class信息写入,反解析的时候,fastjson默认情况下会开启autoType的检查,相当于一个白名单检查吧,如果序列化信息中的类路径不在autoType中,反解析就会报上面的com.alibaba.fastjson.JSONException: autoType is not support的异常。

解决方案:

参考 https://github.com/alibaba/fastjson/wiki/enable_autotype 讲解了3种方式添加autoType的白名单:

1
2
3
4
5
6
7
8
9
10
11
12
1、在代码中配置,如果有多个包名前缀,分多次addAccept
ParserConfig.getGlobalInstance().addAccept("com.taobao.pac.client.sdk.dataobject.");

2、加上JVM启动参数,如果有多个包名前缀,用逗号隔开
-Dfastjson.parser.autoTypeAccept=com.taobao.pac.client.sdk.dataobject.,com.cainiao.

3、通过fastjson.properties文件配置
在1.2.25/1.2.26版本支持通过类路径的fastjson.properties文件来配置,配置方式如下:
fastjson.parser.autoTypeAccept=com.taobao.pac.client.sdk.dataobject.,com.cainiao. // 如果有多个包名前缀,用逗号隔开

//亲测可用,这是我的解决方案
fastjson.parser.autoTypeAccept=me.chanjar.weixin.mp.bean.,cn.pconline.pcloud. // 如果有多个包名前缀,用逗号隔开

如果通过配置白名单解决不了问题,可以选择继续打开autotype功能,fastjson在新版本中内置了多重防护,但是还是可能会存在一定风险。两种方法打开autotype,二选一,如下:

1
2
3
4
5
1、JVM启动参数
-Dfastjson.parser.autoTypeSupport=true
2、代码中设置
ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
如果有使用非全局ParserConfig则用另外调用setAutoTypeSupport(true);

参考文档:

https://blog.csdn.net/u012240455/article/details/80538540

-------------已经触及底线 感谢您的阅读-------------

本文标题:fastjson解析异常 autoType is not support

文章作者:趙小傑~~

发布时间:2019年10月19日 - 22:18:44

最后更新:2019年11月01日 - 22:53:01

原始链接:https://cnsyear.com/posts/303ea689.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%