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了,我闲着无聊就又点了升级,结 ...
随机推荐
- arcpy.mapping常用四大件-StyleItem
arcpy.mapping常用四大件-StyleItem by 李远祥 StyleItem 笔者将其归类到arcpy.mapping的四大件当中,主要是因为它的独特之处,就是其能力是直接读取.styl ...
- PHP标准库(SPL)- SplDoublyLinkedList类(双向链表)
class SplDoublyLinkedList implements Iterator, Traversable, Countable, ArrayAccess { const IT_MODE_L ...
- Android名片扫描识别系统SDK
Android名片扫描识别系统SDK 一.Android名片扫描识别系统应用背景 这些年,随着移动互联的发展,APP应用成爆发式的增长,在很多APP中都涉及到对名片信息的录入,如移动CRM.移动端OA ...
- orcale 之 SQL 语言基础
SQL 全称是结构化查询语句(Structure Query Language),是数据库操作的国际化语言,对所有的数据库产品都要支持. SQL 语言的分类 我们按照其功能可以大致分为四类: 数据定义 ...
- Bootstrap框架的要点--栅格系统
不同的公司要求使用框架有所不同,而Bootstrap框架在工作中使用频次较高,其中栅格系统在这一框架中的地位不容小觑,下面我们开始聊聊它吧. 简单介绍: Bootstrap提供了一套响应式.移动设备优 ...
- .Net程序员学用Oracle系列(17):数据库管理工具(SQL Plus)
1.数据库管理工具概述 2.SQL Plus 实用命令参考 2.1.连接/断开命令 2.2.执行 SQL 语句 2.3.执行 PL/SQL 语句 2.4.文件操作命令 2.5.修改用户密码 2.6.执 ...
- ASP.NET应用程序的文件类型及文件夹列表
文件类型: 1. *.aspx文件:这类文件是ASP.NET Web页面,它包括用户接口和隐藏代码. 2. *.ascx文件:这类文件是用户控件.用户控件同Web页面非常相似,但用户不能直接访问用户控 ...
- 新手学js的效果图1---( 淘宝等商城货物查看特效)
本人结合之前所学一起写了,多个特效,只是新手自己瞎鼓捣的,思路清晰,具体实现的货物放大镜等,替换当中的img地址就可以查看特效 <!DOCTYPE html> <html lang= ...
- 2017 CVTE春招内推专场 C/C++软件开发岗笔试编程题
先来一波吐槽:选择题全是不定项选择,考的内容在我看来,"反正我接受唔到咯". 比如: 1.Windows操作系统某个通信机制(具体题目忘了,反正答案我选了个熟悉的名词"消 ...
- [Hadoop] - Cannot run program "cmake"
在编译hadoop的过程中,遇到缺少cmake命令的异常,异常信息为:Cannot run program "cmake" (in directory "/opt/wor ...