2011-02-05 23 views
3

Java小程序不允许您编写自定义ClassLoader,除非您对小程序进行签名。这是为什么?自定义类加载器只是找到类的工具。除了通过调用私有的“defineClass”方法之外,实际上无法加载该类,因为它是由VM编写和控制的“可信”代码,而不是由您的小程序执行。它不像你获得更多的权限而不是动态加载一个类的能力......真的什么都没有。为什么不允许未签名的applet创建自定义ClassLoaders?

我想作为一个方面的问题:是否有任何其他方式从

byte[] => Class 

这是由未签名的Applet允许动态地去了?

回答

4

defineClass具有一个ProtectionDomain参数,您可以使用包含AllPermission的PermissionCollection传递参数,这将允许您对主机执行基本任何操作。

+0

所以,实际上,如果此方法在ProtectionDomain赋予比加载代码更多的权限时引发异常,那么是否不够? 或者只是限制当前权限和给定权限的交集权限(所以小程序可以用比自己小的权限加载代码)? – 2011-02-05 23:47:58

0

请注意,您可以使用java.net.URLClassLoader.newInstance创建一个ClassLoader。正如bkail所指出的,自定义ClassLoader可以创建具有任意权限的类,也可以绕过其他安全约束。至于为什么没有什么比java.net.URLClassLoader.newInstance更普遍,那么就没有。

相关问题