• fastjson解析异常 autoType is not support


    fastjson解析异常 autoType is not support

    异常信息:

    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、在代码中配置,如果有多个包名前缀,分多次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、JVM启动参数
    -Dfastjson.parser.autoTypeSupport=true
    2、代码中设置
    ParserConfig.getGlobalInstance().setAutoTypeSupport(true); 
    如果有使用非全局ParserConfig则用另外调用setAutoTypeSupport(true);
    

    参考文档:

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

  • 相关阅读:
    [转载]Nginx 常见应用技术指南
    【转载】Memcached Tip 2:Session同步
    【转载】大规模网站架构实战之体系结构
    【转载】3种Nginx防盗链的方法
    poj2390
    poj2395
    poj2393
    poj2209
    poj2392
    爱我更多,好吗?
  • 原文地址:https://www.cnblogs.com/cnsyear/p/12732069.html
Copyright © 2020-2023  润新知