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. cassandra权威指南读书笔记--Cassandra架构(3)

    分阶段事件驱动架构 SEDASEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stage,不同资源消耗的Stage使用不同数量的线程来处 ...

  2. Linux下统计CPU核心数量

    首先第一步,cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 45 model name ...

  3. 【poj 1961】Period(字符串--KMP 模版题)

    题意:给你一个字符串,求这个字符串到第 i 个字符为止的重复子串的个数. 解法:判断重复子串的语句很重要!!if (p && i%(i-p)==0) printf("%d % ...

  4. Codeforces Round #697 (Div. 3) D. Cleaning the Phone (思维,前缀和)

    题意:你的手机有\(n\)个app,每个app的大小为\(a_i\),现在你的手机空间快满了,你需要删掉总共至少\(m\)体积的app,每个app在你心中的珍惜值是\(b_i\),\(b_i\)的取值 ...

  5. hdu 6832 A Very Easy Graph Problem 构造树+dfs

    题意: 给你一个n个点m条边的图,对于第i条边,它的长度是2i,对于每一个顶点,它不是0类型,就是1类型.你需要找出来对于所有的"两个不同类型的点之间最短距离"的和 题解(参考:h ...

  6. 5.PowerShell DSC核心概念之资源

    什么是资源? 资源为 DSC 配置提供构建基块. 资源公开可配置的属性,并包含本地配置管理器 (LCM) 调用以"使其如此"的 PowerShell 脚本函数. 系统内置资源 可在 ...

  7. 4.安装fluentd用于收集集群内部应用日志

    作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-06-13 11:02:14 星期四 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程 ...

  8. Git使用指南(下)

    9 初识分支 把每一次的提交,都用线连起来,你会发现,很连贯. C/C++    指针的概念 git reset --hard commitid HEAD    如果说内容已经add到暂存区,此时要想 ...

  9. windows脚本bat编程:WIN10脚本自动启动虚拟环境中的jupyter

    python编程对各种扩展包的版本依赖较严格,为了解决版本差异,通用情况下会使用virtualenv创建的虚拟环境来独立应用.那么每次使用的时候就需要启动虚拟环境,如果每次都是手工启动,每次输入几条命 ...

  10. Dell Display Manager for Mac

    Dell Display Manager for Mac DDM for macOS solution https://www.dell.com/community/Monitors/DDM-for- ...