我正在尝试创建一个漏洞,我想从netbeans项目之外加载一个子类收银机的类,这应该是最终的。
我可以在原始包badclassloader
中加载LegitClass,并使用:
claz = "badclassloader.LegitClass"
loadClass = this.getClass().getClassLoader().loadClass(claz);
(LegitClass)loadClass.newInstance();
现在我想加载住在另一个项目中的MalClass
并打包'Package Mal'
Mal.MalClass
纳入LoadClass()
方法的路径?我尝试了以下内容:
private void loadLibrary() {
if (library != null) {
AccessController.doPrivileged(new PrivilegedAction() {
@Override
public Object run() {
System.loadLibrary("Path/to/Project/mal.jar");
return null;
}
});
}
}
但首先我得到Directory separator should not appear in library name
所以显然不是这样,我很确定我在这里遗漏了一些相当不错的东西。
答案 0 :(得分:0)
创建一个新的自定义类加载器......
URLClassLoader cl = new URLClassLoader(
new URL[]{new File("Path/to/Project/mal.jar").toURI().toURL()}
);
从类加载器加载类...
Class clazz = cl.loadClass("Mal.MalClass");
创建类的新实例...
Object obj = clazz.newInstance();
现在。你有问题。除非您刚刚加载的Class
实现了两个项目共有的interface
,否则您将无法将Class
的实例解析为实际类型,因为类型在编译时是未知的。相反,你会被迫使用反射,这永远不会很漂亮......