禁用当前线程的 Java 反射
我需要调用一些半可信的Java代码,并希望禁用在该代码执行期间使用反射的功能。
try{
// disable reflection somehow
someObject.method();
}
finally{
// enable reflection again
}
这可以通过安全管理器来完成吗,如果是这样,如何完成?
澄清/背景:这是另一个关于限制可以从JavaScript / Rhino调用的包的问题的后续。接受的答案引用了有关如何执行此操作的博客文章,它需要两个步骤,第一个步骤使用Rhino API(ClassShutter),第二个步骤关闭反射和Class.forName()。我想我可以使用SecurityManager更干净地完成第二步(学习SecurityManager,正如已经指出的那样,这是一个复杂的野兽)。
总而言之,我希望(从代码中,而不是设置文件)关闭Class.forName()和对整个反射包的任何访问。