我见过很多加密类加载器。如:
http://www.javaworld.com/javaworld/javaqa/2003-05/01-qa-0509-jcrypt.html?page=2
那个特别是我正在努力适应我的需求。
我基本上有一个加密的JAR,我已将其解密为字节数组(“byte [] decrypt;”)。
我现在想使用该字节数组来加载类,因此我不需要在包含解密jar的硬盘驱动器上创建文件。
我需要它使用URLClassLoader和NOT ClassLoader,因为我有另一个ClassLoader需要从中获取的数组(“URL [] urls”)。 (除非您可以使用普通的类加载器执行此操作?)
有什么想法吗?
答案 0 :(得分:1)
这看起来非常类似于这篇SO帖子:
Load a Byte Array into a Memory Class Loader
我认为这里唯一的修改是利用父类加载器 - 所以当你创建自定义类加载器的实例时,将URLClassLoader传递给构造函数
public class MyClassLoader extends ClassLoader {
public MyClassLoader(URLClassLoader parent, byte[] decryptedBytes) {
super(parent);
this.decryptedBytes = decryptedBytes;
}
protected byte[] decryptedBytes;
public Class findClass(String name) {
byte[] b = loadClassData(name);
if (b != null) {
return defineClass(name, b, 0, b.length);
} else {
// delegate to parent URL classloader
getParent().findClass(name);
}
}
private byte[] loadClassData(String name) {
// load the class data from the connection
// use JarInputStream, find class, load bytes ...
. . .
}
}