解決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
= 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)淺析