fastjson升级版本遇到的问题
前面的话:
有关阿里的fastjson升级时遇到的问题,链接如下
https://github.com/alibaba/fastjson/wiki/enable_autotype
我要说的,是我碰到这个问题时的一些处理
1、问题描述:
我所在的项目组是使用的微服务架构,我们组只负责我们自有模块,其他模块由其他团队负责,有一天,看到一条新闻说是fastjson修复了一些高危漏洞,然后我们就协定升版本,然后今天就踩到了这个坑,报错如下:
com.alibaba.fastjson.JSONException: unclosed.str
问题是这样的,我们原有代码转换的时候一个json字符串处理如下
String str = "{'@type':'com.dcf.platform.token.MessageHolder','forSend':'211554','generateTime':1490422777204,'id':'18701762172','lastCanSendTime':1490422777204,'message':'211554'}";
Object obj = JSON.parse(str);
当这个json字符串转化为object的时候,autotype被fastjson禁用掉了,导致异常
2、问题处理:
按照fastjson官网(就是最上面那个链接里)的说法,有几种处理方式,我们就临时先做了一个简单粗暴的处理,等到周一之后讨论具体方案(因为今天是周六)
做法就是按照官网说法,在tomcat的catalina.sh里面的JAVA_OPTS参数后面添加了JVM启动参数:-Dfastjson.parser.autoTypeSupport=true
这样子就不会报错了,不过这只是临时做法,因为这个是fastjson的安全漏洞,如果按照这种方式的话,也还是存在这样的漏洞的
3、另一种相对较好的解决方式:
添加配置项:fastjson.properties里面加入fastjson.parser.autoTypeAccept=com.serol.pojo
问题也可以解决,注意后面的包名是所要转换对象的包名,测试如下:
Person person = new Person("明明", "aa", 21);
final String valueStr = JSON.toJSONString(person, SerializerFeature.WriteClassName);
System.out.println(valueStr);
Object obj = JSON.parse(valueStr);
System.out.println(((Person)obj).getUsername());
这个相对硬编码方式ParserConfig.getGlobalInstance().addAccept("com.serol.pojo");的好处是不用去修改原有代码,只需要添加这个配置,
相对于修改JVM启动参数的好处是,这个解禁autotype只针对所设置的这个包下的对象,其他的还是不可以转化
4、其他处理:
以上是针对已有代码,不愿意去大动干戈,那么如果新写的话,以怎样的方式更好一些呢?
我的做法是,转化时,需要传入所要转化对象的class
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.serol.pojo.Person;
main: System.out.println(((Person)getJsonObject(Person.class)).getUsername());
public static Object getJsonObject(Class<?> clazz){
Person person = new Person("明明", "aa", 21);//转化json,简单化处理
String valueStr = JSON.toJSONString(person);//转化json,简单化处理
System.out.println(valueStr);
JSONObject obj = JSON.parseObject(valueStr);
return JSONObject.toJavaObject(obj, clazz);
}
这样的话,就完全不用担心那个安全问题了,避免autotype
有更好的方式请加评论,有问题,我们共同解决共同进步
fastjson升级版本遇到的问题的更多相关文章
- IDEA升级版本后界面出现变小,字体变细的问题解决
笔者在今天升级了最新版本的IDEA 2019后发现,该版本的IDEA出现了非常诡异的事情如下图: 升级版本后字体居然发生了变化(通过官方导入的我自己的settings文件)还是出现了问题. 问题解决方 ...
- SQLSERVER 升级版本的方法
1. 以SQLSERVER2014为例说明 SQLSERVER升级版本的方法, 也适用于evaluation 版本超过180天之后的处理. 2. 打开所有的应用 看到有一个 sqlserver2008 ...
- Git的升级版本
关于升级版本,例如我们要升级service版本,我们可以这样子操作 1.在master里面pull完了之后,到自己的分支,然后merge master里面的代码,然后把pom文件 里面的版本升一级,然 ...
- H5+ 重写在线升级版本比较代码
重写h5+在线升级版本比较代码 hello h5+版本在线升级提供了如下的版本比较方法,逻辑比较繁琐,相关判断多余,非常不宜读. 先判断新旧版本有无, 接着分割为数组比较数组项大小,而且还只取了前四项 ...
- 所有的 Unix Like 系统都会内建 vi 文书编辑器。vim 是vi的升级版本,它不仅兼容vi的所有指令 ,而且还有一些新的特性在里面。
所有的 Unix Like 系统都会内建 vi 文书编辑器.vim 是vi的升级版本,它不仅兼容vi的所有指令 ,而且还有一些新的特性在里面. https://blog.csdn.net/carolz ...
- Maven-内部多个项目依赖自动升级版本的部署
需要自动升级版本的AAA项目发布 (有内部依赖时) 步骤比较复杂, 有一些需要根据实际情况调整. 考虑了以下几种可能性: 依赖模块的版本有更新 依赖模块版本没更新 依赖模块的版本号: 直接定义, 用属 ...
- 解决AndroidStudio升级版本后恢复初始化设置的问题
今天把AndroidStudio升级到1.5后发现所有的个性设置全变为初始化了.包括皮肤啊,字体大小.颜色啊,以及快捷键等等.一瞬间就懵了. 升级完后好像有一个弹窗就是提示是否要继续使用之前的配置的, ...
- 【开源】SpringBootNetty聊天室V1.2.0升级版本介绍
前言 SpringBoot!微服务微架构的基础,Netty通信框架的元老级别框架,即之前的SpringBoot与Netty的实现聊天室的功能后已经过了不到一周的时间啦,今天我们更新了项目版本从V1.0 ...
- wordpress升级版本时出现错误“Maximum execution time of 30 seconds exceeded”
wordpress版本是4.9,之前升级5.0时就提示这个错误了,但因为我用的第三方主题,所以也没想去解决,也担心升级了wp版本后主题出问题. 现在wp版本已经到了5.2了,我闲着无聊就又点了升级,结 ...
随机推荐
- 分布式架构--Dubbo项目实战学习文档
安装Dubbo注册中心(Zookeeper-3.4.6) 安装Dubbo管理控制台 Tomcat中部署web应用 ---- Dubbo服务消费者Web应用war包的部署 Dubbo监控中心的介绍与简易 ...
- python3 - 通过BeautifulSoup 4抓取百度百科人物相关链接
导入需要的模块 需要安装BeautifulSoup from urllib.request import urlopen, HTTPError, URLError from bs4 import Be ...
- matlab和C语言的break及continue测试
break和continue语句 有两个附加语句可以控制while和for循环:break和continue语句.break语句可以中止循环的执行和跳到end后面的第一句执行,而continue只中止 ...
- python - bilibili(一)获取直播间标题
近几年,直播平台蛮火的.小时候,经过各种日漫的洗礼,在直播平台自然而然的就盯上了B站. 目前还是python菜鸟一枚,各位大佬请轻拍. 最终效果图: 闲话不说,我们来一步步解析B站的弹幕. 工具:py ...
- FPGA学习体会
我是安徽工程大学电子信息科学与技术专业的学生刘美花,在v3学院的培训结束了,这十几天的培训对我来说还是挺有意义的,不过中间也有一些波折.还记得刚开始的时候和老师还有各个学校的学生不太熟,心中有诸多不满 ...
- Webpack学习系列(二)
一: 安装: npm install webpack-dev-server -g npm install webpack-dev-server --save (下载到当前文件夹) npm instal ...
- Unity 碰撞器和触发器的理解
要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对 ...
- 单线程JavaScript
最近在阅读<你不知道的JavaScript中卷>,当我看到第二部分介绍异步和回调函数的一些知识时,由于该书在第二部分1.2章对线程.事件循环的概念介绍的并非详细,因此引发了我的一系列思考. ...
- Angular.js之服务与自定义服务学习笔记
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java重写equals()和hashCode()
1.何时需要重写equals() 当一个类有自己特有的 ”逻辑相等”概念(不同于对象身份的概念). 2.设计equals() [1]使用instanceof操作符检查 ”实参是否为正确的类型”. [2 ...