目录介绍:
json是什么编码
JSON是一种基于JavaScript语法子集的开放标准数据交换格式。JSON 是基于文本的,轻量级的,通常被认为易于读/写的数据交换格式。
但是JSON 容易受到 JavaScript 插入攻击者的攻击,他们可以破译和提取系统/ Web 服务器内容并传输应用程序对象。因此,在实现 JSON 之前,开发人员应该不断了解所有安全漏洞和可能的解决方案。
spring mvc 注解怎么连接所有进入controler的请求并过滤其中的xss
由于只需要对content-type=application/json;charset=UTF-8的json请求进行处理,所以需要重写MappingJacksonHttpMessageConverter部分方法。
注意:如果使用的是MappingJackson2HttpMessageConverter,需要重写MappingJackson2HttpMessageConverter部分方法。
Jackson替换fastjson的几个坑
最近fastjson漏洞频出,于是公司要求将所有的应用fastjson引用都换成jackson。这期间改造了大量应用,踩出来的坑珠峰倒进去估计也填不满。
首先是fastjson本身的一些小问题,由于其封装度很高,写起来比较偷懒。老应用中很多同事的偷懒写法,改的我几乎吐血。例如JSONArray,看似是对JSON对象的数组的封装,实际上什么都能放,就是一个ListObject,众所周知泛型写Object是最偷懒的写法,对后来者实在是太不友好了。。。遇到JSONArray的使用,改造时只能先写成ListObject,再小心翼翼的根据上下文,转换出具体类型。
说到类型转换,就不得不提JSONObject特别亲民的一系列getString(),getBigDecimal接口,写起来那叫一个方便。老应用中RESTFul接口的RequestBody也不定义Bean,直接JSONObject接着就完事,想用String就getString,当JSONObject被替换成Map的时候,再转String就不能直接用类型转换了,因为getString是兼容了其他不是String的类型的,当然也不能用String.valueOf方法,因为null类型的处理会有偏差。所以遇到这种情况,只能乖乖的自己写一个类型转换的工具类。每次看到这种 情况,我真的很想把开发的老哥揪回来问一句,你定义一个bean不香吗?
说到香,就不得不再说说我们新的真香--Jackson。fastjson在中文互联网之所以流行,顾名思义,它非常的fast。我做了一个简单的测试,分别使用fastjson和jackson,将一个Map转换成json字符串,测试结果如下
偶买噶,性能也相差无几。当然需要注意的是,自己封装jackson的工具类时,ObjectMapper最好写成单例,不然性能差不多会低上10倍吧。工具类的更换比业务逻辑的修改更容易踩坑。
说到坑,就不得不提Jackson的几个坑。在json字符串转换成bean时,jackson默认是大小写敏感的,也就是说,如果json中字段名是User,而bean的字段名是user,Jackson是不认识的,直接抛异常。解决起来倒是不复杂,ObjectMapper添加配置:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES,true);
此外,当json中的字段,bean中不存在时,jackson并不会忽略它,默认是抛出异常。稍微有点违反直觉。通过加配置也能解决:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
网友评论
最新评论
相差无几。当然需要注意的是,自己封装jackson的工具类时,ObjectMapper最好写成单例,不然性能差不多会低上10倍吧。工具类的更换比业务逻辑的修改更容易踩坑。 说到坑,就不得不提J
f方法,因为null类型的处理会有偏差。所以遇到这种情况,只能乖乖的自己写一个类型转换的工具类。每次看到这种 情况,我真的很想把开发的老哥揪回来问一句,你定义一个bean不香吗? 说到香,
中文互联网之所以流行,顾名思义,它非常的fast。我做了一个简单的测试,分别使用fastjson和jackson,将一个Map转换成json字符串,测试结果如下 偶买噶,性能也相差无几。当然需要注意的是,自己封装jackson的工具类时,ObjectMapper最好写成单例,不然性能差不多
ontroler的请求并过滤其中的xss由于只需要对content-type=application/json;charset=UTF-8的json请求进行处理,所以需要重写MappingJacksonHttpMessageConverter部分方法。注意:如果使用的是MappingJa
请求并过滤其中的xss由于只需要对content-type=application/json;charset=UTF-8的json请求进行处理,所以需要重写MappingJacksonHttpMes