限制 class 在 class 已加载 class 中的使用
Restrict class usage in classloaded classes
我想从实现接口的文件系统加载 *.class
个文件。
但我只想从 java.util.*
包中加载依赖于 类 的类文件?这可能吗?如果可以的话如何?我的意思是如果 类 是动态创建的,它有可能检测到非法 类 的使用吗?使用本机图像时也可以吗?
提前致谢。
But i want only load classfiles which depend on classes from the java.util.* package? Is this possible and if yes how?
我也这么认为。
class 的加载程序由 thatClassInstance.getClassLoader()
编辑 return。它是调用其 .defineClass()
方法以加载 class.
的加载程序
想法是,任何时候 class 做任何涉及任何其他 class 的事情,它的 class 加载器被要求提供所述 class.
现在,通常情况下,class 加载器会询问其父加载器是否已经加载了这个 class,或者它是否可以加载那个 class,然后 return 那个(class 的加载程序然后用于 class 最终使用的任何东西)。然而,那只是因为 ClassLoader 的 loadClass
方法是这样编程的。您可以改写它。
所以,计划是:
写一个class加载器。这将加载您想要加载 'restrictly' 本身的自定义 class,因此,请确保您是调用 defineClass
的人。不要覆盖 findClass(因为只有在父加载器没有加载 class 并且找不到它时才会调用它),覆盖 loadClass.
然后,对于加载的 class 试图检查的任何内容,您的 loadClass 也会被调用。因此,检查正在加载的 class 的名称。如果是您不喜欢的名称,请拒绝加载。如果是你喜欢的名字,请家长载入
请注意,有人可以创建一个名为 Foo.java
的文件,将: package java.util; public class Foo {}
放入其中,然后让您的加载程序加载 java.util.Foo
。这不是一个试图阻止人们做坏事的好机制,基本上没有安全的方法来 运行 你不信任自己的 VM 的代码,就这样。如果这就是你想要这样做的原因,没关系 - 你就是不能那样做。
我想从实现接口的文件系统加载 *.class
个文件。
但我只想从 java.util.*
包中加载依赖于 类 的类文件?这可能吗?如果可以的话如何?我的意思是如果 类 是动态创建的,它有可能检测到非法 类 的使用吗?使用本机图像时也可以吗?
提前致谢。
But i want only load classfiles which depend on classes from the java.util.* package? Is this possible and if yes how?
我也这么认为。
class 的加载程序由 thatClassInstance.getClassLoader()
编辑 return。它是调用其 .defineClass()
方法以加载 class.
想法是,任何时候 class 做任何涉及任何其他 class 的事情,它的 class 加载器被要求提供所述 class.
现在,通常情况下,class 加载器会询问其父加载器是否已经加载了这个 class,或者它是否可以加载那个 class,然后 return 那个(class 的加载程序然后用于 class 最终使用的任何东西)。然而,那只是因为 ClassLoader 的 loadClass
方法是这样编程的。您可以改写它。
所以,计划是:
写一个class加载器。这将加载您想要加载 'restrictly' 本身的自定义 class,因此,请确保您是调用 defineClass
的人。不要覆盖 findClass(因为只有在父加载器没有加载 class 并且找不到它时才会调用它),覆盖 loadClass.
然后,对于加载的 class 试图检查的任何内容,您的 loadClass 也会被调用。因此,检查正在加载的 class 的名称。如果是您不喜欢的名称,请拒绝加载。如果是你喜欢的名字,请家长载入
请注意,有人可以创建一个名为 Foo.java
的文件,将: package java.util; public class Foo {}
放入其中,然后让您的加载程序加载 java.util.Foo
。这不是一个试图阻止人们做坏事的好机制,基本上没有安全的方法来 运行 你不信任自己的 VM 的代码,就这样。如果这就是你想要这样做的原因,没关系 - 你就是不能那样做。