【Java】使用Json-lib序列化关联对象的异常解决

XXE与Java反序列化漏洞:原理、挖掘与防御实战 在Web安全领域,数据解析与对象序列化是支撑现代应用通信与数据持久化的基础技术。XML作为广泛使用的数据交换格式,其解析器在处理外部实体时若配置不当,可能引发XXE漏洞,导致敏感文件读取或内网探测。Java反序列化机制则通过字节流重建对象,但危险类库的自动方法调用可能形成利用链,最终实现远程代码执行。这些漏洞的技术价值在于它们往往绕过传统安全检测,直接威胁服务器底层安全。在应用场景中,XXE常见于XML接口、文件上传解析等场景,而Java反序列化则多出现在RMI、JMX服务及特定HTTP参数中。本文聚焦XX 阅读详情


开发中遇到前端ajax向后台请求数据,后台使用JsonLib序列化对象后以json形式返回,但当遇到相互关联的对象时会出现问题:

Customer customer1 = new Customer(1001, "张三");
Customer customer2 = new Customer(1002, "李四");
Order order1 = new Order("order001", "广州", customer1);
Order order2 = new Order("order002", "上海", customer2);
Order order3 = new Order("order003", "山东", customer1);
customer1.getOrders().add(order1);
customer1.getOrders().add(order3);
customer2.getOrders().add(order2);
List<Customer> customers = new ArrayList<Customer>();
customers.add(customer1);
customers.add(customer2);
// 使用JSONArray序列化List
JSONArray jsonArray = JSONArray.fromObject(customers);
ServletActionContext.getResponse().getWriter().print(jsonArray.toString());

使用Jquery向后台请求数据:


$(function(){
	$.get("${pageContext.request.contextPath}/showCustomers.action", function(data){
		console.info(data);  // action返回json数据
	});
});
按以上代码时,customer关联了order,order也关联了customer,当两个对象相互关联时在序列化时就会出现以下异常:
net.sf.json.JSONException: There is a cycle in the hierarchy!
遇到这种情况,如果在序列化时只想序列化customer不序列化它所关联的order,可将代码改为如下:
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(new String[]{"orders"};  // 不序列化order
JSONArray jsonArray = JSONArray.fromObject(customers, jsonConfig);
ServletActionContext.getResponse().getWriter().print(jsonArray.toString());
使用火狐看到的结果如下:

如果也想序列化出customer关联的order但又解决双向关联的死循环问题,代码则如下:
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(new String[]{"customer"};  // 序列化order,并阻止order中的customer序列化
JSONArray jsonArray = JSONArray.fromObject(customers, jsonConfig);
ServletActionContext.getResponse().getWriter().print(jsonArray.toString());
使用火狐看到的结果如下:

除了使用JsonLib外,也可以使用FlexJson,使用FlexJson比使用JsonLib更灵活(导入flexjson.jar)
JSONSerializer jsonSerializer = new JSONSerializer();
String result = jsonSerializer.serialize(customers);  // 默认只会序列化当前对象,关联的order不会被序列化
String result = jsonSerializer.deepSerialize(customers);  // 深度序列化,关联的对象也会被序列化(不会死循环)










Java反序列化漏洞深度解析:从AspectJWeaver漏洞看安全防御实战 Java反序列化机制允许将字节流恢复为对象,其核心原理是通过自动调用对象的readObject方法重建对象实例。这一机制在带来便利的同时,也引入了严重的安全风险:攻击者可构造恶意序列化数据,在目标系统反序列化时触发危险操作链,最终实现远程代码执行。从技术价值看,理解反序列化漏洞有助于构建更健壮的企业级应用安全体系。在应用场景上,广泛使用Java序列化的RPC通信、缓存存储、消息队列等场景都可能成为攻击入口。本文以AspectJWeaver依赖中的SimpleCache类为切入点,结合Apache Commo 阅读详情

相关推荐

Java反序列化漏洞实战:普元EOS中间件CC6变种利用链分析与防御

Java反序列化漏洞是Java安全领域的经典高风险问题,其核心原理在于应用程序对不可信的序列化数据流进行反序列化操作时,未进行严格的类名白名单校验。攻击者可利用ClassPath中存在的危险类(如Apache Commons Collections库中的Transformer相关类)构造一条从反序列化入口点到危险操作(如命令执行)的调用链(Gadget Chain),从而实现远程代码执行。这项技术的价值在于深刻揭示了依赖库安全与企业级应用架构风险之间的关联,在金融、电信等核心业务系统的中间件安全中尤为重要。

weixin_30266885的博客 373

libjson使用详解(linux和windows)

我长话短说: http://download.youkuaiyun.com/detail/rongxiaojun/6859823 从官网下的最新的libjson 在centOS 6.4下使用各种错误,“undifined reference to JSONNode”等。 上面是我经过修改后的库文件,解压后两文件:libjson.a 和 libjson.tar.bz2,把静态库libjson.a放到库

rongxiaojun的专栏 1万+

Java反序列化漏洞实战:从URLDNS探测到CC6利用链深度解析

Java反序列化漏洞是Web安全领域的经典议题,其核心在于ObjectInputStream.readObject()方法在还原对象时,会递归调用对象及其成员变量的readObject方法。攻击者通过精心构造的序列化数据,利用目标Classpath中已有的类作为“跳板”,串联形成从反序列化入口到危险操作(如命令执行)的完整Gadget Chain。这一机制在Apache Commons Collections等通用库中尤为突出,因其类中的特定方法常被用于构造利用链。理解反序列化漏洞的原理,不仅有助于渗透测试

weixin_30627341的博客 352

java json传到前台_java把结果集序列化成json通过out流传给前台步骤

1.把处理好的list或map序列化成JSON字符/*** 序列化集合成JSON字符* @param list* @return*/public static String structureConfigParamsGroupJSONData(List> list){JSONSerializer serializer = new JSONSerializer();String json=""...

weixin_39873356的博客 215

在 Java 开发及其生态圈中“声东击西”的误导性错误

Java开发中常见的"非直接原因"错误解析:类加载问题(如NoClassDefFoundError实际是静态初始化失败)、框架陷阱(Spring事务失效可能因同类调用绕过代理)、并发问题(OOM可能由元空间动态类过多导致)和序列化异常(NotSerializableException可能因内部类引用)。这些错误往往表象与根源不符,需深入分析JVM机制和框架原理才能准确定位。建议排查时关注底层原因而非表面错误,注意类加载器、代理机制和异常处理等关键环节。

Donald的博客 978

Canal数据同步实战:自定义Kafka消息格式与序列化器改造

在数据同步与实时数据管道构建中,ETL(提取、转换、加载)是核心环节,它负责将源数据转换为适合下游消费的格式。其原理在于在数据流转的早期阶段进行清洗、过滤和格式化,以提升数据质量和降低下游处理复杂度。这一过程的技术价值在于实现数据供给的标准化与高效化,能显著减少网络传输开销和消费端解析成本。典型的应用场景包括MySQL binlog实时同步至消息队列,供多个微服务消费。本文聚焦于Canal这一流行的MySQL增量数据订阅工具,针对其默认输出格式冗余、不贴合业务的问题,深入探讨如何通过自定义MessageSe

weixin_33923762的博客 467

linux C语言 libjson-c解析 JSON格式 生成JSON格式 API

linux C语言 libjson-c解析 JSON格式 生成JSON格式 API

季春贰柒的博客 940

LibJosnSerial.rar

直接下载, 解压, 然后用VS编译器直接编译, 无任何依赖, 一次就能编译成功, 基于RapidJosn 开源的代码进行封装,

有效选择七个关于Java的JSON开源类库

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33924220的博客 584

LibJosnSerialDemo.rar

C++ 基于rapidjson对json字符串的进行序列化与反序列化

CloudCompare横截面工具实战:从点云切片到轮廓提取的完整流程

本文详细介绍了CloudCompare软件中Cross Section工具的核心功能与实战流程。从交互式裁剪框的精准操控,到包络线提取的参数设置与优化,再到内部轮廓提取及批量处理技巧,完整解析了如何从三维点云中高效提取建筑立面、隧道断面等关键轮廓信息,是点云数据处理与分析的实用指南。

weixin_29290963的博客 286

net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

net.sf.json.JSONException: java.lang.reflect.InvocationTargetException 博客分类:  json .netJavajsonHibernate  json-lib对象转化为json数据抛net.sf.json.JSONException: va.lang.reflect.InvocationTargetE

lkl713的专栏 3734

【推荐算法】召回模型总结

【推荐算法】召回模型总结

m0_48086806的博客 6250

json-lib 出现net.sf.json.JSONException: There is a cycle in the hierarchy异常的解决办法

因为项目中使用了AJAX技术,JAR包为:json-lib.jar, 在开发过程中遇到了一个JSON-LIB和Hibernate有关的问题:net.sf.json.JSONException: There is a cycle in the hierarchy! at net.sf.json.util.CycleDetectionStrategy$StrictCycleDetectionStr

1890

FineReport V11.0安装避坑指南:从下载到激活的完整流程(附百度网盘链接)

本文提供FineReport V11.0从下载、安装到激活的完整避坑指南。详细解析了部署前的环境准备、安装过程中的JVM内存等核心配置、激活流程以及安装后的优化与常见问题排查,旨在帮助用户一次部署成功,确保企业级报表平台的稳定运行。

echo99的专栏 1197

HIL(硬件在环)技术汇总梳理

HIL(Hardware-in-the-Loop)测试领域的知名公司有dSPACE、NI、Vector和speedgoat等,本文是针对这几家HIL技术的对比分析。

Mr.Cssust的博客 3690

net.sf.json.JSONException: There is a cycle in the hierarchy异常的解决方法

以前遇到这个问题都是设下JsonConfig 的一个属性的:config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); 到后来才发现,这样不能从根源解决问题。后来在网上看到一个人写的博客,写的太棒了,转来跟大家分享下。 博客地址:http://chenjinglys.blog.163.com/blog/static

NBA_2011的专栏 2151

ESD镜像解密与转换全攻略:从esd-decrypter到WinNTSetup的完整流程

本文详细解析了ESD镜像的加密特性与压缩优势,并提供了从解密到转换的完整实战指南。核心步骤包括使用esd-decrypter工具解密ESD文件为WIM格式,以及如何结合WinNTSetup进行灵活的系统安装或进一步封装为可引导的ISO镜像,帮助用户高效处理官方Windows安装镜像。

weixin_29207439的博客 455

出现net.sf.json.JSONException: There is a cycle in the hierarchy异常的解决办法

因为项目中使用了AJAX技术,JAR包为:json-lib.jar,?在开发过程中遇到了一个JSON-LIB和Hibernate有关的问题: net.sf.json.JSONException: There is a cycle in the hierarchy! at net.sf.json.util.CycleDetectionStrategy$S...

weixin_34168700的博客 122

基于Python的彩票数据爬虫:数据抓取与趋势分析

爬虫是一种用于从互联网上自动抓取信息的程序。在抓取彩票数据时,我们首先需要确定目标网站并获取其网页内容,接着提取彩票的开奖结果信息并保存。彩票数据通常是以HTML表格或列表的形式展示,爬虫可以利用Python的requests和来抓取静态网页,或使用Selenium来抓取动态页面。在本篇博客中,我们深入探讨了如何使用Python编写彩票数据爬虫,抓取并分析彩票开奖结果。通过Python爬虫技术,结合数据分析与可视化工具,我们能够全面分析历史开奖数据,揭示彩票号码的频率分布、趋势变化以及未来的可能走势。

2201_76125261的博客 1941

STM32 HAL PWM (占空比) -电机软启动不到位解决

为了避免电机启动电压大造成设备损坏,或者供电不足导致重启,通常在对启动都需要一个PWM进行软启动,下面对PWM电机软启动详细介绍。

weixin_44597885的博客 868

Ajax请求后以JSON格式返回数据,Java 中怎么把一个对象封装成Json对象

第一种方法: 项目当中我希望把一个对象方便的封装成JSON对象,当然需要导入相关Jar 包 json-lib-2.2.2-jdk15.jar 与commons-beanutils-1.7.0.jar 下面生成Json对象,使用fromObject()方法将user对象格式化成Json格式,如下面代码:  JSONObject json = new JSONObject().fromObj...

PickRecalled 593

【OpenClaw从入门到精通】第45篇:Skill供应链安全——如何识别并避开恶意技能插件?(2026实测版)

随着OpenClaw生态爆发式增长,全球Skills总量近75万个,日均新增2.1万个,但恶意/问题插件已超600个,数十万用户受影响。本文基于奇安信威胁报告及360安全实践,拆解恶意技能的五大核心特征,提出"安装前三步法"安全审查流程,详解安全技能来源白名单与定期审计方案,并深度解析360龙虾Skill安全超市的分级认证机制。读者可掌握从技能筛选、安装审查到术后审计的全流程安全防护手段,通过实操命令与案例演示,零成本构建Skill供应链安全防线,避免遭遇私钥窃取、资产损失等安全事件。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 564

jQuery调用JSON时,net.sf.json.JSONException: There is a cycle in the hierarchy!

遇到了一些问题,如hibernate延迟加载错误,这都是老掉牙的问题了,一看就知道加个lazy=flase就OK了。想不到快要完成了又遇到了新的问题,JSON死循环,实在让人郁闷。异常如下: net.sf.json.JSONException: There is a cycle in the hierarchy!         at net.sf.json.util.CycleDet

沈荣荣的博客 573

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java反序列化漏洞深度剖析:从CC链原理到代码审计实战

Java序列化机制是Java生态中实现对象持久化和网络传输的基础技术,其核心在于通过ObjectInputStream.readObject()方法将字节流还原为对象。然而,这一机制在安全层面存在固有风险,因为readObject()方法作为反序列化过程的回调入口,允许类定义中包含自定义逻辑,这为攻击者提供了潜在的利用点。其技术价值在于理解这一机制如何被恶意利用,对于构建安全的Java应用至关重要。在实际应用场景中,当用户可控的数据被直接反序列化,且ClassPath中存在特定组件库时,攻击者可以构造一条由

weixin_34248487的博客 693

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

j4rs数组和集合处理:在Rust中创建和操作Java数组与容器的完整指南

j4rs(Java for Rust)是一个强大的跨语言桥接工具,它允许开发者在Rust应用中无缝集成Java代码。本文将详细介绍如何利用j4rs在Rust中创建和操作Java数组与集合,帮助开发者轻松处理跨语言数据结构转换问题。 ## 为什么选择j4rs处理Java数组和集合? 在Rust中操作Java数据结构可能会面临类型系统差异和内存管理挑战。j4rs通过提供简洁的API和自动内存管理,

gitblog_01034的博客 150

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: 【SpringMVC】文件上传Expected MultipartHttpServletRequest: is a MultipartResolver错误解决
下一篇: 【HTML+CSS】教你切图篇3-自定义单选、多选、下拉框的实现
励志故事
博客等级 码龄12年 99粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值