限制类加载类中的类使用



我想从实现接口的文件系统加载*.class文件。

但是我只想加载依赖于java.util.*包中的类的类文件?这可能吗?如果可能,怎么做?我的意思是,如果是动态创建的,是否可以检测到非法类的使用?在使用本机图像时也可以这样做吗?

提前谢谢。

但是我只想加载依赖于java.util.*包中的类的类文件?这可能吗?如果可能,怎么做?

我想是的。

类的加载器由thatClassInstance.getClassLoader()返回。它是调用其.defineClass()方法来加载类的加载器。

其思想是,每当该类做任何涉及任何其他类的事情时,它的类加载器都会被要求提供所述类。

现在,通常情况下,该类加载程序会询问其父加载程序是否已经加载了该类,或者是否可以加载该类,然后只返回该类(然后该类的加载程序将用于该类最终使用的任何内容(。然而,这只是因为ClassLoader的loadClass方法是这样编程的。您可以替代它。

因此,计划是:

编写一个类加载器。这将加载您想要"限制性"加载的自定义类本身,因此,确保您是调用defineClass的那个。不要重写findClass(因为只有当父加载程序没有加载该类并且找不到它时才会调用findClass(,重写loadClass。

然后,您的loadClass也将被调用,用于加载的类试图检查的任何内容。因此,请检查正在加载的类的名称。如果它是一个你不喜欢的名字,拒绝加载它。如果它是你喜欢的名称,请家长加载它。

请注意,有人可以制作一个名为Foo.java的文件,将:package java.util; public class Foo {}放入其中,然后要求加载程序加载java.util.Foo。这不是一个阻止人们做坏事的好机制,基本上没有安全的方法在自己的VM上运行你不信任的代码。如果这就是你想这么做的原因,别介意——你就是做不到。

相关内容

  • 没有找到相关文章

最新更新