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. 设计模式(十二)——享元模式(Integer缓冲池源码分析)

    1 展示网站项目需求 小型的外包项目,给客户 A 做一个产品展示网站,客户 A 的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同: 1) 有客户要求以新闻的形式发布 2) 有客户人要 ...

  2. 使用TCP发送文件

    客户端 package com.zy.demo3; import java.io.File; import java.io.FileInputStream; import java.io.IOExce ...

  3. hdu5790 Prefix(Trie树+主席树)

    Problem Description Alice gets N strings. Now she has Q questions to ask you. For each question, she ...

  4. Kafka SASL/SCRAM+ACL实现动态创建用户及权限控制

    kafka系列文章 第一章 linux单机安装kafka 第二章 kafka--集群安裝部署(自带zookeeper) 第三章 Kafka SASL/SCRAM+ACL实现动态创建用户及权限控制 Ka ...

  5. Python+Appium实现自动抢微信红包

    前言 过年的时候总是少不了红包,不知从何时开始微信红包横空出世,对于网速和手速慢的人只能在一旁观望,做为python的学习者就是要运用编程解决生活和工作上的事情. 于是我用python解决我们的手速问 ...

  6. [备忘] DevOps 工具上的准备清单(不断补充中……)

    目录 概念 发展历程 工具清单 规划 概念 从字面上来看,"DevOps"一词是由英文 Development(开发)和 Operations (运维)组合而成,但它所代表的理念和 ...

  7. 一些CTF题目--20/9/3

    1. 看源码 POST方法.Extract覆盖. 直接url ?参数不行,因为POST参数不在URL上,GET参数才在 Burpsuite抓包,改成  pass=1&thepassword_1 ...

  8. TCP协议与UDP协议的区别以及与TCP/IP协议的联系

    先介绍下什么是TCP,什么是UDP. 1. 什么是TCP? TCP(Transmission Control Protocol,传输控制协议)是面向连接的.可靠的字节流服务,也就是说,在收发数据前,必 ...

  9. docker-swarm----多机容器管理

    Docker Swarm: 准备三台机器,都装上 Docker docker swarm是docker官方提供的一套容器编排系统.它的架构如下: swarm是一系列节点的集合,而节点可以是一台裸机或者 ...

  10. h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated

    Reference 问题 ... h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype ...