當前位置:
首頁 > 知識 > 解決tomcat中反序列化找不到class

解決tomcat中反序列化找不到class

tomcat反序列化的過程中一直報ClassNotFoundException,這個是什麼原因呢

很明顯是classloader找不到這個class,為什麼呢,我的應用代碼中明明就有啊。

實際上java反序列化的時候,我們一般用的是ObjectInputStream,他默認會去找sun.misc.VM.latestUserDefinedLoader,這個就是系統默認的appClassloader。

重點來了,我們的tomcat中應用代碼的類不是appClassloader,而是webAppClassloader,是tomcat自己搞的一個classLoader。

解決方法:寫個類繼續ObjectInputStream,覆蓋他的resolveClass方法。使用當前線程的classloader,也就是webAppClassloader

具體代碼:

package com.vip.marmot.mirror.agent.dataHandler;

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
import java.util.HashMap;

/**
* Created by cloud.huang on 17/5/18.
*/
public class YunbinObjectInputStream extends ObjectInputStream {
public YunbinObjectInputStream(InputStream in) throws IOException {
super(in);
}

protected YunbinObjectInputStream throws IOException, SecurityException {
}

/**
* table mapping primitive type names to corresponding class objects
*/
private static final HashMap> primClasses
= new HashMap<>(8, 1.0F);

static {
primClasses.put("boolean", boolean.class);
primClasses.put("byte", byte.class);
primClasses.put("char", char.class);
primClasses.put("short", short.class);
primClasses.put("int", int.class);
primClasses.put("long", long.class);
primClasses.put("float", float.class);
primClasses.put("double", double.class);
primClasses.put("void", void.class);
}

@Override
protected Class resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
String name = desc.getName;
try {
ClassLoader loader = Thread.currentThread.getContextClassLoader;
return Class.forName(name, false, loader);
} catch (ClassNotFoundException ex) {
Class cl = (Class) primClasses.get(name);
if (cl != null) {
return cl;
} else {
throw ex;
}
}
}
}

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

php jquery+ajax寫批量刪除
Neo4j 第一篇:在Windows環境中安裝Neo4j
js實用方法記錄-簡單cookie操作
CentOS 7 安裝Graphite
javascript之深入剖析this

TAG:達人科技 |

您可能感興趣

Hessian2ObjectInput.readObject : hessian 反序列化空指針異常
FastJson反序列化漏洞利用的三個細節-TemplatesImpl利用鏈
Oracle WebLogic Server反序列化遠程代碼執行漏洞成焦點
NodeJS反序列化漏洞利用getshell
利用fastjson反序列化json為對象和對象數組
使用RedisTemplate(JDK序列化策略)緩存實體類
Mozilla Rhino 反序列化漏洞 POC 分析
Weblogic反序列化命令執行漏洞
關於使用fastjson統一序列化響應格式
從微博motan看rpc基於netty4遠程通訊設計5-協議編解碼與序列化
MapReduce數據序列化讀寫概念淺析!
WebLogic WLS核心組件曝反序列化漏洞
通過小細節大幅改善 Django Rest 框架序列化性能
Weblogic反序列化遠程代碼執行漏洞研究分析
Python編程:序列化和反序列化
千里眼可信主動免疫防護系統Weblogic反序列化漏洞防護方案
CVE-2018-2628 Weblogic反序列化POC重構詳解
【Golang區塊鏈開發003】區塊序列化存儲
Go 中 JSON 的序列化和反序列化
Numpy反序列化命令執行(CVE-2019-6446)淺析