Java applet不允许您编写自定义ClassLoader,除非您对applet进行签名。为什么会这样?自定义ClassLoader只是查找类的工具。除了通过调用私有“defineClass”方法之外,您实际上无法加载该类,该方法是“受信任的”代码,因为它是由VM编写和控制的,而不是由您的applet编写和控制的。这并不像你获得的权限多于动态加载类的能力......这实际上什么都不是。
我想作为一个侧面问题:还有其他方法可以动态地从
开始byte[] => Class
这是未签名的小程序允许的吗?
答案 0 :(得分:4)
defineClass有一个ProtectionDomain参数,您可以使用包含AllPermission的PermissionCollection传递该参数,这将允许您基本上对主机执行任何操作。
答案 1 :(得分:0)
注意,您可以使用ClassLoader
创建java.net.URLClassLoader.newInstance
。正如bkail所指出的,自定义ClassLoader
可以创建具有任意权限的类,并绕过其他安全约束。至于为什么没有比java.net.URLClassLoader.newInstance
更通用的东西,那么就没有。{/ p>