在不同的classloader之间进行对象的序列化和反序列化

在同一个classloader中,利用如下的方法serializabale和deserializable对象:

  ByteArrayOutputStream bo=new ByteArrayOutputStream();

  ObjectOutputStream oo=new ObjectOutputStream(bo);
  oo.writeObject(outObject);

 

   ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray());
  ObjectInputStream oi=new ObjectInputStream(bi);
  Object inObject = oi.readObject();
    当序列化的对象和反序列化的对象不在同一个classloader中时,以上的代码执行时,就会报无法把属性付给对象的错误,此时应当,通过设置反序列化得classloader,来解决这个问题。

  首先,从ObjectInputStream继承一个自己的ObjectInputStream:

public class CustomObjectInputStream extends ObjectInputStream {

 protected ClassLoader classLoader = this.getClass().getClassLoader();

 /**
  * @param in
  * @throws IOException
  */
 public CustomObjectInputStream(InputStream in) throws IOException {
  super(in);
  // TODO Auto-generated constructor stub
 }

 public CustomObjectInputStream(InputStream in, ClassLoader cl)
   throws IOException {
  super(in);
  // TODO Auto-generated constructor stub
  this.classLoader = cl;
 }

 /*
  * (non-Javadoc)
  *
  * @see java.io.ObjectInputStream#resolveClass(java.io.ObjectStreamClass)
  */
 @Override
 protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException,
   ClassNotFoundException {
  // TODO Auto-generated method stub
  String name = desc.getName();
  try {
   return Class.forName(name, false, this.classLoader);
  } catch (ClassNotFoundException ex) {
   return super.resolveClass(desc);
  }
 }

}

然后在反序列化时,把序列化对象的classloader的传入:

 

 

ByteArrayOutputStream bo=new ByteArrayOutputStream();

ObjectOutputStream oo=new ObjectOutputStream(bo);
oo.writeObject(outObject);

 

   ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray());

   CustomObjectInputStream oi=new CustomObjectInputStream(bi,outObject.getClass().getClassLoader());
  
   Object = oi.readObject();

 

Nacos 2.x JRaft Hessian反序列化RCE漏洞深度解析 Nacos作为主流微服务配置与服务治理中心,其底层通信机制的安全性直接影响整个云原生架构的可信边界。JRaft是Nacos 2.0+默认启用的强一致性协议,而它依赖的Hessian 3.2.1序列化器因缺乏类白名单校验,构成高危反序列化风险。该漏洞不依赖用户认证、绕过WAF与RASP检测,仅需未鉴权HTTP接口(如/nacos/v1/ns/operator/metrics)配合application/x-hessian请求体即可触发远程代码执行。技术价值在于直击基础设施层,实现从服务治理组件到宿主机权限的越 阅读详情

相关推荐

commons-io-2.6.jar下载

commons-io-2.6.jar下载

不同类装载器生成的Class对象,所生成的实例相互转化报ClassCastException

package com.jaychang.demo; public class Dog { public String say(String name) { System.out.println("Hello " + name); return "Hello " + name; } }   package com.jaychang.demo; impor...

Jay Chang 572

OPCUA二(通过OPCUA服务器访问CPU)

摘要:本文介绍了使用UaExpert软件连接西门子PLC的OPC UA配置方法,包括IP地址设置(默认端口4840)、安全认证和证书信任流程。详细说明了数据访问操作,如变量拖拽监控和属性解读(NodeId、Value、状态码等)。特别强调连接仿真Advance7时需先启动实例。最后预告下章将讲解通过KerServer访问CPU。文章涵盖配置步骤、常见问题处理及实用技巧,适合工业自动化开发者参考。

欢迎来到RaymondLeigh的知识共享基地 1336

Parcelable 实现序列化与反序列化

Android Parcelable 实现序列化与反序列化

zsy_2020的博客 483

FPGA_AD9361实战

1.参考网站。

Pual_Georg的博客 748

MuJoCo 相机图片怎么拿?视角调整获取物体图片及实时显示(附代码)

在Mujoco的仿真中,对于识别抓取场景来说,如何获得添加的body等物体的实时图像很重要,今天就分享下如何添加相机视角及可视化小方块(举例)的实时图片。复制一个scene.xml为scene_withcamera.xml,在xml中添加camera和小方块如下。设置xml文件中添加的相机body id。需要创建一个离屏渲染器。

darcsdn 2128

ClassLoader引发的类型转换异常

Java的类型转换异常(ClassCastException),恐怕是开发中最常见的异常之一,比如你把一个本身为String的对象强行转换成List时,就会抛出此异常。当然,一般情况下这种错误很容易就从异常信息中发现原因并纠正,通常对于此类问题我们的想法就是:class文件相同,即字节码相同,那么实例化产生的对象肯定也会相同类型。但是,存在一些情况,会发生形如“把class1转换成class1却抛

王程斯的专栏 8082

别再调PID了!用MATLAB/Simulink给四旋翼无人机搭个ADRC控制器(附完整仿真模型)

本文详细介绍了在MATLAB/Simulink环境中为四旋翼无人机搭建ADRC控制器的完整流程,包括核心原理、Simulink建模、参数调试技巧及与PID控制的性能对比。ADRC通过扩张状态观测器(ESO)有效提升无人机在复杂扰动下的控制性能,特别适合四旋翼无人机这类强耦合系统。文章还提供了完整的仿真模型和工程实践问题解决方案。

weixin_26808439的博客 381

对象流涉及的序列化与反序列化

对象流 对象流是一对高级流,可以对java中的任何对象进行读写 将对象读写到文件中 先新建一个Person类 public class Person implements Serializable{ private static final long serialVersionUID = 1L;//这个叫序列化版本号,影响着反序列化是不是能够成功 private String name; p...

qq_37959072的博客 196

GD32 TIMER0 PWM输出死活没波形?别忘了这个关键配置(附完整代码)

本文详细解析了GD32 TIMER0 PWM输出无波形的常见问题,特别强调了高级定时器特有的主输出使能配置。通过完整的代码示例和调试技巧,帮助开发者快速解决PWM输出问题,适用于无刷电机控制等嵌入式应用场景。

weixin_30906185的博客 397

工业级Modbus ASCII实时监控系统(WinForms完整实现)

本文介绍了一个基于WinForms的工业级Modbus ASCII实时监控系统实现方案。该系统采用经典工控界面布局,包含串口配置、数据采集控制和实时数据显示三大区域。核心功能包括:串口通信参数设置、Modbus从站地址配置、寄存器数据采集、实时数据表格展示和趋势图绘制。系统通过ModbusAsciiClient类实现通信核心,采用定时器轮询机制采集数据,支持最多100个数据点的历史趋势显示。界面设计注重用户体验,配置区位于左侧,主显示区在右侧,底部为状态和日志区,符合工业控制系统的操作习惯。代码示例展示了窗

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 277

对象的序列化和反序列化

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。 把Java对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为Java对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保...

daixj110的专栏 152

09 SAP CPI 访问公共API接口

我在网上找了一个公共API,入参输入汉字返回拼音。至此,一个真正的访问API的接口就做好了。点击保存时可看到红叉报错。

SAP CPI 477

使用自定义ClassLoader解决反序列化serialVesionUID不一致问题

转载于:使用自定义ClassLoader解决反序列化serialVesionUID不一致问题 0x01 背景 serialVesionUid不一致导致反序列化失败也算是Java反序列化漏洞利用比较常见的问题了。查了下资料,发现了各种各样的方法,但没有找到一种适合所有gadget的通用解决方案,为此我花了一些时间,算是找到了自己心中比较完美的解决方案:自定义ClassLoader。目前已经将其集成到ysoserial中,可完美解决各类gadget serialVesionUID不一致问题。 0x02 各方案的

yangyangrenren的专栏 691

SAP_SD模块 物料科目分配/成本简介

路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义并分配科目代码—定义科目代码。路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义访问顺序和科目确定类型。路径:SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—收入科目确定相关性—定义并分配科目确定过程。文本主要说明销售模块中的科目分配和成本的一个对应关系。SPRO—销售与分销—基本功能—科目分配/成本—收入账户确定—检查科目分配的相关主数据。

我小时候很黑的博客 2617

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Hessian/Java反序列化采用自定义的Classloader

Hessian/Java反序列化采用自定义的Classloader 对于采用OSGi来做系统的人而言,ClassLoader的问题必然是头号需要解决的问题,如果又是个需要远程通讯的OSGi应用的话,那么反序列化的classloader问题几乎可以肯定是会碰到的,来看看在如今流行的两种序列化、反序列化协议:java/hessian中如何使用自定义的classloader。 java/hessi...

GodIstheBoy 452

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java对象的序列化和反序列化

引言:   序列化是将对象的状态信息转换为可以存储或传输的形式的过程,在序列化期间,对象将其带你过去的状态写入到临时或持储存区,反序列化就是重新创建对象的过程,此对象来自于临时或持久储存区。 序列化的作用:   就好比如存储数据到数据库,将一些数据持久化到数据库中,而有时候需要将对象持久化,虽然说将对象状态持久化的方式有很多,但是java给我们提供了一种很便捷的方式,那就是序列化,序列化可以实现对...

qiyue683209的博客 279

IDEA的使用指南

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

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Java反序列化】URLDNS

序列化代码: import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.lang.reflect.Field; import java.net.URL; import java.util.HashMap; public class UrlDnsClient { public static void main(String[] args)

m0_61572518的博客 2628

ObjectOutputStream序列化和ObjectInputStream反序列化

/* java对象本来是存储在堆中的,若是采取保护措施,则保存到硬盘中,这个过程叫序列化 相应的有反序列化 java也有编译和反编译,不过反编译产生的java源文件和本来的java源文件存在一定区别 java.io.ObjectOutputStream;序列化java对象到硬盘(Serial) java.io.ObjectInputStream;将硬盘中的数据反序列化到jvm内存(DeSeri...

rolic_的博客 509

ClassLoader 反序列化利用链

文章目录ClassLoader类核心方法1、loadClass:加载java类2、findCLass:查找Java类3、defineClass:定义Java类例子????本地栗子远程栗子回显栗子通过loadClass函数通过defineClass函数 ClassLoader类中loadClass()、findClass()、defineClass()等方法都可以成为利用链中的重要一环,特别是在反序列化漏洞中常常被用到。 ClassLoader类核心方法 1、loadClass:加载java类 该方法使用双亲

你和萤火虫有两个共同点,在我的眼里都会发光,同时,都已经很多年没见了 1136

对象的反序列化流_ObjectInputStream

package com.learn.demo04.ObjectStream; import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; /* java.io.ObjectInputStream extends InputStream ObjectI...

Leon_Jinhai_Sun的博客 226

网络安全之反序列化漏洞分析

网络安全之反序列化漏洞分析

2201_75735270的博客 904

Java反序列化基础-类的动态加载

类的动态加载、双亲委派的作用,以及字节码文件的利用

每天一小步,进步一大截 1425

Dubbo反序列化故障排查:从RpcInvocation解码失败到类加载器隔离

在分布式微服务架构中,远程过程调用(RPC)是实现服务间通信的核心技术,其底层依赖高效的序列化与反序列化机制完成数据的跨进程传输。序列化协议(如Hessian2、Kryo)负责将对象转换为二进制流,反序列化则是将二进制流还原为对象的过程,这一过程的稳定性直接影响服务调用的成功率。当服务提供者无法正确解码消费者发送的请求时,通常意味着反序列化环节出现异常,可能导致服务调用链路的断裂。从技术价值角度看,稳定的序列化机制保障了分布式系统的数据一致性和通信可靠性,尤其在电商、金融等高并发场景中至关重要。本文聚焦于D

weixin_34199335的博客 340
上一篇: 利用maven组装项目
下一篇: log4j配置
tkxing
博客等级 码龄19年 1粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值