1.问题描述

  在使用redis时,配置自定义序列化redisTemplate为FastJsonRedisSerializer . 

 1 /**
2 * 自定义redis序列化器
3 */
4 @SuppressWarnings("unchecked")
5 @Bean("redisTemplate")
6 public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
7
8 RedisTemplate<Object, Object> template = new RedisTemplate<>();
9 // 配置连接工厂
10 template.setConnectionFactory(factory);
11
12 // 使用fastJson序列化
13 FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
14
15 // key的序列化采用StringRedisSerializer
16 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
17 template.setKeySerializer(stringRedisSerializer);
18 template.setHashKeySerializer(stringRedisSerializer);
19
20 // value值的序列化采用fastJsonRedisSerializer
21 template.setValueSerializer(fastJsonRedisSerializer);
22 template.setHashValueSerializer(fastJsonRedisSerializer);
23
24 return template;
25 }

  redis中数据结构为:{"@type":"com.***.UserEntity","id":"1177881490377158658","nickName":"test"}  

  在反序列化时报错 com.alibaba.fastjson.JSONException: autoType is not support.

二.原因分析

  2017年3月15日,fastjson官方发布安全升级公告,该公告介绍fastjson在1.2.24及之前的版本存在代码执行漏洞,当恶意攻击者提交一个精心构造的序列化数据到服务端时,由于fastjson在反序列化时存在漏洞,可导致远程任意代码执行。
  自1.2.25及之后的版本,禁用了部分autotype的功能,也就是”@type”这种指定类型的功能会被限制在一定范围内使用。
  而由于反序列化对象时,需要检查是否开启了autotype。所以如果反序列化检查时,autotype没有开启,就会报错。

三.解决办法

  官方给出的开启autotype的方法:enable_autotype

  我采用的第一种:在代码中配置白名单

 1 import com.alibaba.fastjson.JSON;
2 import com.alibaba.fastjson.parser.ParserConfig;
3 import com.alibaba.fastjson.serializer.SerializerFeature;
4 import org.springframework.data.redis.serializer.RedisSerializer;
5 import org.springframework.data.redis.serializer.SerializationException;
6
7 import java.nio.charset.Charset;
8
9 /**
10 * 自定义redis序列化
11 *
12 * @param <T>
13 * @author xhq
14 * @version 1.0
15 * @date 2019年11月15日
16 */
17 public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {
18
19 private static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
20 private Class<T> clazz;
21
22 /**
23 * 添加autotype白名单
24 * 解决redis反序列化对象时报错 :com.alibaba.fastjson.JSONException: autoType is not support
25 */
26 static {
27 ParserConfig.getGlobalInstance().addAccept("com.***.UserEntity");
28 }
29
30 public FastJsonRedisSerializer(Class<T> clazz) {
31 super();
32 this.clazz = clazz;
33 }
34
35 @Override
36 public byte[] serialize(T t) throws SerializationException {
37 if (null == t) {
38 return new byte[0];
39 }
40 return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
41 }
42
43 @Override
44 public T deserialize(byte[] bytes) throws SerializationException {
45 if (null == bytes || bytes.length <= 0) {
46 return null;
47 }
48 String str = new String(bytes, DEFAULT_CHARSET);
49 return JSON.parseObject(str, clazz);
50 }
51
52 }

解决使用Redis时配置 fastjson反序列化报错 com.alibaba.fastjson.JSONException: autoType is not support的更多相关文章

  1. 使用Redis 配置替换fastjson 反序列化报错 com.alibaba.fastjson.JSONException: autoType is not support

    新建的GenericFastJson2JsonRedisSerializer里面添加白名 添加: static {        ParserConfig.getGlobalInstance().ad ...

  2. fastJson解析报错:com.alibaba.fastjson.JSONException: can't create non-static inner class instance.

    原因: 如果出现类嵌套类的情况,需要将被嵌套的那个类设置为static. 比如: public class AA { // 相关属性 public class BB {//会报错 // 相关属性 } ...

  3. java后台接收json数据,报错com.alibaba.fastjson.JSONObject cannot be cast to xxx

    从前台接收json封装的list数据,在后台接收时一直报错,com.alibaba.fastjson.JSONObject cannot be cast to xxx, 使用这种方式接收可以接收 @R ...

  4. fastjson序列化和反序列化报com.alibaba.fastjson.JSONException: autoType is not support异常问题,解决方案整合

    1.问题起因 2017年3月15日,fastjson官方发布安全升级公告,该公告介绍fastjson在1.2.24及之前的版本存在代码执行漏洞,当恶意攻击者提交一个精心构造的序列化数据到服务端时,由于 ...

  5. 解决---MISCONF Redis被配置为保存RDB快照,但目前无法在磁盘上存留。可能修改数据集的命令被禁用。请检查Redis日志,了解有关错误的详细信息。

    解决---MISCONF Redis被配置为保存RDB快照,但目前无法在磁盘上存留.可能修改数据集的命令被禁用.请检查Redis日志,了解有关错误的详细信息. 出现bug: 在学习celery,将数据 ...

  6. vue项目初始化时npm run dev报错webpack-dev-server解决方法

    vue项目初始化时npm run dev报错webpack-dev-server解决方法 原因:这是新版webpack存在的BUG,卸载现有的新版本webpack,装老版本就好webpack-dev- ...

  7. 解决jira配置gmail邮箱报错

    具体报错: AuthenticationFailedException: 535-5.7.8 Username and Password not accepted. Learn more at 535 ...

  8. C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理

    C#编译器优化那点事   使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...

  9. Springboot解决资源文件404,503等特殊报错,无法访问

    Springboot解决资源文件404,503等特殊报错 原文链接:https://www.cnblogs.com/blog5277/p/9324609.html 原文作者:博客园--曲高终和寡 ** ...

随机推荐

  1. CCF CSP 202012-1 期末预测之安全指数

    202012-1 期末预测之安全指数 题目背景 期末要到了,小菜同学找到了自己的好朋友顿顿,希望可以预测一下自己这学期是否会挂科. 题目描述 首先,顿顿选取了如"课堂表现".&qu ...

  2. Windows下使用poetry和pyproject.toml

    0. 题引 为什么要使用poetry? 因为想使用pyproject.toml,并通过pyproject.toml进行依赖包管理,目前pip还不支持,所以poetry是首选 为什么要使用pyproje ...

  3. unix环境高级编程第四章笔记

    文件和目录 start fstart lstart函数 一旦给出pathname, start函数就返回了与此命名文件有关的信息结构 #include <sys/start> int st ...

  4. G - 跑跑卡丁车

    跑跑卡丁车是时下一款流行的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣.这款游戏的特别之处是你可以通过漂移来获得一种加速卡,用这种加速卡可以在有限的时间里提高你的速度.为了使问题简单化,我们假设 ...

  5. 2019牛客暑期多校训练营(第九场)B Quadratic equation (平方剩余)

    \((x+y)\equiv b\pmod p\) \((x\times y)\equiv c\pmod p\) 由第一个式子可知:\(x+y=b~or~x+y=b+p\) 先任选一个代入到第二个式子里 ...

  6. codeforces 128B. String

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  7. hdu5371 Hotaru's problem

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission ...

  8. Codeforces Round #650 (Div. 3) D. Task On The Board (构造,贪心)

    题意:有一个字符串和一组数,可以对字符串删去任意字符后为数组的长度,且可以随意排序,要求修改后的字符串的每个位置上的字符满足:其余大于它的字符的位置减去当前位置绝对值之和等于对应序列位置上的数. 题解 ...

  9. 实战交付一套dubbo微服务到k8s集群(8)之configmap使用

    使用ConfigMap管理应用配置 拆分环境 主机名 角色 IP地址 mfyxw10.mfyxw.com zk1.od.com(Test环境) 192.168.80.10 mfyxw20.mfyxw. ...

  10. 概率分析方法与推断统计(来自我写的python书)

    在数据分析统计的场景里,常用的方法除了描述性统计方法外,还有推断统计方法,如果再从工作性质上来划分,推断统计包含了参数估计和假设验证这两方面的内容.而推断统计用到了很多概率统计方法,所以本小节在介绍推 ...