com.alibaba.fastjson.JSONException: safeMode not support autoType : com.*.common.core.domain.User

解决 com.alibaba.fastjson.JSONException: autoType is not support. 1、问题描述     升级fastjson的版本后,反序列化List集合时,报错:Exception in thread “???” com.alibaba.fastjson.JSONException: autoType is not support. 2、问题产生原因     2017年3月15日,fastj... 阅读详情
AI摘要

本文探讨了使用FastJSON反序列化JavaBean时遇到的autoType不支持异常问题,详细分析了异常产生的原因并提供了相应的解决方案。

通过fastjson反序列化某javabean时失败,并抛出以下异常:

Could not deserialize: autoType is not support. com.xxx.Shop; nested exception is com.alibaba.fastjson.JSONException: autoType is not support. com.xxx.Shop
    at com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer.deserialize(GenericFastJsonRedisSerializer.java:37)

然而只有项目第一次反序列化该javabean时会抛异常失败,复现方式只有重启项目后的第一次反序列化操作。
过程

查询官方文档,开启AutoType的方法
enable_autotype。

但是文档中的方法均测试无效,无奈debug源码,发现抛出异常的代码为
com.alibaba.fastjson.parser.ParserConfig的1125行代码:

JavaBeanInfo beanInfo = JavaBeanInfo.build(clazz, clazz, propertyNamingStrategy);
if (beanInfo.creatorConstructor != null && autoTypeSupport) {
    throw new JSONException("autoType is not support. " + typeName);
}

经与正常反序列化的javabean比较后,发现反序列化失败的javabean在如上代码执行时,beanInfo.creatorConstructor的值不为null,最后抛出autoType is not support的异常。

继续追踪,在com.alibaba.fastjson.util.JavaBeanInfo283行代码判断反序列化失败的javabean为接口或抽象类:

boolean isInterfaceOrAbstract = clazz.isInterface() || Modifier.isAbstract(clazz.getModifiers());

再于com.alibaba.fastjson.util.JavaBeanInfo381行代码的if判断分支下给beanInfo.creatorConstructor赋值:

else if (!isInterfaceOrAbstract){
    ...
    for (Constructor constructor : constructors) {
        Class<?>[] parameterTypes = constructor.getParameterTypes();
  
        if (className.equals("org.springframework.security.web.authentication.WebAuthenticationDetails")) {
            if (parameterTypes.length == 2 && parameterTypes[0] == String.class && parameterTypes[1] == String.class) {
                creatorConstructor = constructor;
                creatorConstructor.setAccessible(true);
                paramNames = ASMUtils.lookupParameterNames(constructor);
                break;
            }
        }
    
        if (className.equals("org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken")) {
            if (parameterTypes.length == 3
                    && parameterTypes[0] == Object.class
                    && parameterTypes[1] == Object.class
                    && parameterTypes[2] == Collection.class) {
                creatorConstructor = constructor;
                creatorConstructor.setAccessible(true);
                paramNames = new String[] {"principal", "credentials", "authorities"};
                break;
            }
        }
    
        if (className.equals("org.springframework.security.core.authority.SimpleGrantedAuthority")) {
            if (parameterTypes.length == 1
                    && parameterTypes[0] == String.class) {
                creatorConstructor = constructor;
                paramNames = new String[] {"authority"};
                break;
            }
        }
    
        boolean is_public = (constructor.getModifiers() & Modifier.PUBLIC) != 0;
        if (!is_public) {
            continue;
        }
        String[] lookupParameterNames = ASMUtils.lookupParameterNames(constructor);
        if (lookupParameterNames == null || lookupParameterNames.length == 0) {
            continue;
        }
    
        if (creatorConstructor != null
                && paramNames != null && lookupParameterNames.length <= paramNames.length) {
            continue;
        }
    
        paramNames = lookupParameterNames;
        // 有参数构造方法给beanInfo.creatorConstructor赋值
        creatorConstructor = constructor;
    }
}

最终定位项目中通过fastjson反序列化失败,是因为该javabean没有无参构造方法,被fastjson判断为接口或抽象类,最终抛出autoType is not support的异常。
解决

给javabean添加无参构造方法。

我的代码中的bean添加了无参构造方法,同时也做了如下设置,但是仍报错,后来排查是运维在jvm参数添加的-Dfastjson=safemode导致的,改成TrimStringFieldValue就可以了,我使用的fastjson是1.2.74版本,同时设置成安全模式时1.2.70版本不会有这个错误。

static
{
    ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
}
解决com.alibaba.fastjson.JSONException: autoType is not support. xxx 问题 最近搞一个项目遇到一个RedisConfig序列化问题,是用fastjson做的。 阅读详情

相关推荐

Fastjson安全模式异常解析:从autoType漏洞到安全加固实战

JSON反序列化是现代Java Web开发中数据交换的核心环节,其原理是将JSON字符串转换为Java对象,以实现高效的数据传输与处理。然而,动态类型识别功能在带来便利的同时,也可能引入严重的安全风险,例如通过恶意构造的@type字段触发远程代码执行。为了平衡功能与安全,主流JSON库引入了安全机制。Fastjson的安全模式(safeMode)便是一种关键的安全加固手段,它通过彻底禁用autoType功能,从根本上阻断此类攻击路径。该机制适用于对安全性要求极高的生产环境,是构建纵深防御体系的重要实践。本文

weixin_30613433的博客 319

fastjson 安全漏洞

本文转载自微信公众号Hollis,作者Hollis。如果有侵权,请联系我,立马删除。 fastjson大家一定都不陌生,这是阿里巴巴的开源一个JSON解析库,通常被用于将Java Bean和JSON 字符串之间进行转换。 前段时间,fastjson被爆出过多次存在漏洞,很多文章报道了这件事儿,并且给出了升级建议。 但是作为一个开发者,我更关注的是他为什么会频繁被爆漏洞?于是我带着疑惑,去看了下fastjson的releaseNote以及部分源代码。 最终发现,这其实和fastjson中的一个AutoType

regrethh的博客 5233

fastJson序列化问题:自动类型不受支持

总结起来,fastJson 的 “com.alibaba.fastjson.JSONException: autoType is not support” 异常是因为默认情况下 fastJson 不支持自动类型的序列化和反序列化。然而,当我们在使用 fastJson 进行序列化时,有时可能会遇到一个常见的问题,即 “com.alibaba.fastjson.JSONException: autoType is not support”。这样一来,fastJson 将允许自动类型的序列化和反序列化操作。

DevScribe的博客 1305

fastjson反序列化失败autoType is not support

描述 通过fastjson反序列化某javabean时失败,并抛出以下异常: Could not deserialize: autoType is not support. com.xxx.Shop; nested exception is com.alibaba.fastjson.JSONException: autoType is not support. com.xxx.Shop at c...

祈雨v的博客 1万+

常见机械臂模型不用找!Mujoco这儿都有!

高质量的模型集合,franka panda,so-arm100,ur之类的机械臂都有。常见机械臂模型不用找!Mujoco这儿都有!大概346M,网速不行的可以下载zip。

darcsdn 992

双重机器学习 stata教程 手把手教学

双重机器学习(DDML)的stata教程

weixin_59030591的博客 1万+

Fastjson安全模式异常解析:autoType机制与安全防护实战

JSON反序列化是现代Java应用开发中的基础技术,它负责将JSON数据转换为Java对象,广泛应用于API接口、消息队列等场景。其核心原理在于通过反射机制,根据JSON结构动态构建对象实例。然而,这一过程若未加控制,可能引发严重的安全风险,例如攻击者通过精心构造的JSON数据,利用特定类的危险方法实现远程代码执行(RCE)。为此,主流JSON库引入了安全机制来防御此类漏洞。Fastjson作为广泛使用的库,其autoType功能在提供便利的同时也带来了风险,而safeMode(安全模式)则是其设计的终极安

weixin_30527423的博客 382

华为云Stack扩容实战:从CMDB配置到计算节点增减容,一份避坑指南

本文详细解析华为云Stack扩容实战,从CMDB配置到计算节点增减容的全流程操作指南。通过典型场景案例和避坑建议,帮助企业高效管理计算资源扩容与减容,确保业务连续性。特别针对华为云Stack的弹性扩容能力提供专业指导,涵盖存储、网络及自动化工具链的配合使用。

weixin_30591551的博客 479

【SpringSecurity】safeMode not support autoType

/下面是一个静态代码块,它的作用是在类加载时执行一次,用于设置FastJson的全局配置。//开启全局AutoType。我是lombok注解的,这个原因直接排除。1.开启全局autoType,设置白名单。后面是更换了依赖版本,当时的版本号如下。后面换成版本号略小的,暂时解决。修改后没有变化,仍然报错。

weixin_73549836的博客 1275

Seedance2.5本地部署:从环境配置到批量生图的工程实践指南

最近在几个技术社群里,看到不少人在讨论 AI 生图和视频工具。有人抱怨在线服务要么贵、要么慢、要么生成内容受限;也有人尝试了各种“免费”方案,结果不是功能残缺就是暗藏收费陷阱。就在大家觉得“又好又免费”的本地部署方案门槛太高时,Seedance2.5 突然冒了出来,而且口号相当直接:本地部署、完全免费、不联网、功能对标甚至超越一些付费产品。 但这类宣传我们见多了,真正的问题是:它到底能不能在普通开发者的机器上跑起来?生成质量是否真的可用?长期使用会不会遇到模型崩溃、依赖冲突或者资源爆炸?更重要的是,对于一个

weixin_27419879的博客 1127

四足狗机器人硬件开发技术栈详解

本文系统介绍了四足狗机器人的硬件开发技术,重点分析了五大核心模块:机械结构(骨架设计)、动力系统(关节驱动)、感知系统(环境监测)、控制系统(决策中枢)和电源系统(能源管理)。文章详细阐述了各模块的选型标准、技术要点和协同设计原则,提供了从需求定位到组装调试的完整开发流程,并针对常见问题给出解决方案。随着材料轻量化、模块标准化和AI集成化的发展趋势,四足机器人硬件将向更灵活、更智能的方向演进,为工业巡检、应急救援等场景提供更强大的移动平台支持。

start_up_go的博客 284

com.alibaba.fastjson.JSONException: autoType is not support. com.xxx

com.alibaba.fastjson.JSONException: autoType is not support. 在一次使用Redis中发现在set/get值时都都会出现如下报错信息,其实意思就是fastjson在进行序列化以及反序列化时,在白名单里面找不到这个对象,无法序列化 解决方案 配置白名单 找到FastJson2JsonRedisSerializer对象在静态代码块中加入如下配置 ParserConfig.getGlobalInstance().addAccept("你的实体类包名

JolyouLu的博客 944

边缘设备部署全攻略——ARM架构设备的OpenClaw优化(2026实测)

本文详细介绍了ARM架构设备上OpenClaw的部署与优化方案。针对边缘计算场景,文章系统分析了三类ARM设备:嵌入式设备(如Raspberry Pi 4、Jetson Nano)、工业设备(如BeagleBone、i.MX8M Plus)和服务器设备(如Marvell Armada、AWS Graviton3),并提供了详细的性能与功耗对比数据。在系统配置方面,重点推荐了Ubuntu ARM、Debian ARM和OpenWRT三种操作系统,包括内核版本、必备软件包和针对边缘环境的优化策略(如CPU频率调

博客 410

解决com.alibaba.fastjson.JSONException:autoType is not support问题,Redis FastJson

解决fastjson反序列化问题,fastjson2.0.xx,redisconfig

djouyang9090的博客 1万+

自动批量安装加载cran, bioconductor和github三个平台的所有的R包

自动批量安装加载cran, bioconductor和github三个平台的所有的R包

qq_40073899的博客 560

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

com.alibaba.fastjson.JSONException: autoType is not support.

错误原因是fastJson反序列化的时候发生了异常 解决方法是: 添加autotype白名单 在resource下建立fastjson.properties文件 输入一下内容 #fastjson反序列化时自动解析白名单配置,多个实体用逗号分隔 fastjson.parser.autoTypeAccept=com.rc.openapi.domain.mysql.entity.DBillnoRules 就可以解决反序列化的错误了 ...

京北游戏官方 1858

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

fastjson开启safeMode,关闭autoType,去除安全漏洞

## fastjson开启safeMode,关闭autoType,去除安全漏洞 在1.2.68之后的版本,在1.2.68版本中,fastjson增加了safeMode的支持。safeMode打开后,完全禁用autoType。所有的安全修复版本sec10也支持SafeMode配置。 有三种方式配置SafeMode,如下: 在代码中配置 ParserConfig.getGlobalInstance().setSafeMode(true); 注意,如果使用new ParserConfig的方式,需要注意单例处

blood_Z的博客 8595

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java工程师成神之路java基础知识之序列化(二)

原文作者:Hollis serialVersionUID 序列化是将对象的状态信息转换为可存储或传输的形式的过程。 我们都知道, Java对象是保存在JVM的堆内存中的, 也就是说, 如果JVM堆不存在了, 那么对象也就跟着消失了。 ⽽序列化提供了⼀种⽅案, 可以让你在即使JVM停机的情况下也能把对象保存下来的⽅案。 就像我们平时⽤的U盘⼀样。 把Java对象序列化成可存储或传输的形式( 如⼆进制流) , ⽐如保存在⽂件中。 这样, 当再次需要这个对象的时候, 从⽂件中读取出⼆进制流, 再从⼆进制流中反序列

r_b_y的博客 764

fastjson 如何忽略@type类型解析

最新使用Springboot redisTemplate遇到一个问题,自定义RedisSerializer中使用了fastjson进行序列化,调用JSON.toJSONString函数时添加了SerializerFeature.WriteClassName参数,导致反序列化的时候报错,,原因就是反序列化指定的类类型与序列化的时候不一致,虽然类名一样,但是全路径不一样。通常在不同的系统间进行交互,使用同一个redis集群中的资源时会出该问题。自定义AutoTypeCheckHandler,进行全局配置。

程序员星痕的博客 5105

Java下bug经历汇总

java下Bug Error:(34, 23) java: expected private String abstract; 变量命名结果用了人家关键字啊啊 java.lang.NoSuchMethodException: java.util.List.() 远程调用时,要用to对象接受,传输过来的json java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.yfxu.common.utils.PageU

qq_40265247的博客 1038

fastjson到底做错了什么?为什么会被频繁爆出漏洞?

GitHub 15.8k Star 的Java工程师成神之路,不来了解一下吗! GitHub 15.8k Star 的Java工程师成神之路,真的不来了解一下吗! GitHub 15.8k Star 的Java工程师成神之路,真的真的不来了解一下吗! fastjson大家一定都不陌生,这是阿里巴巴的开源一个JSON解析库,通常被用于将Java Bean和JSON 字符串之间进行转换。 前段时间,fastjson被爆出过多次存在漏洞,很多文章报道了这件事儿,并且给出了升级建议。 但是作为一个开发者,我更关注的

HollisChuang's Blog 2万+

autoType is not support. org. springframework.security.core.authority FastJson2022年autotype漏洞修复指南

FastJson2022年autotype漏洞修复指南漏洞说明问题1.产生问题的代码不兜圈子,直接说明升级及解决方案结语 漏洞说明 为了不浪费时间,直接官方说明 官方链接: link 问题 首先说明官方提供给的几种方式中大多是采取禁用autoType这个功能。 但是这个对于业务中使用了autotype功能且已经上线的应用非常不友好,直接使用最新版本fastjson或者开启safemode都会直接导致原有应用报错。下面介绍我司应用升级采取的修改,各位可参考 1.产生问题的代码 在使用fastjson 代理re

Software As Business 6987

解决com.alibaba.fastjson.JSONException: autoType is not support

最近发现进程运行日志中出现很多下面的日志: com.alibaba.fastjson.JSONException: autoType is not support. com.jd.ac.domain.api.offline.UserInfo at com.alibaba.fastjson.parser.ParserConfig.checkAutoType(ParserConfig.

左手吐司 · 右手花卷 4万+
上一篇: java序列化反序列化工具类SerializeUtils.java
下一篇: 记录一次因为修改域名导致的线上事故
qq_34412985
博客等级 码龄11年 143粉丝 983原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值