我需要调用一些半可靠的Java代码,并希望禁用在代码执行期间使用反射的功能.
try{
// disable reflection somehow
someObject.method();
}
finally{
// enable reflection again
}
Run Code Online (Sandbox Code Playgroud)
可以使用SecurityManager来完成,如果是这样,怎么做?
澄清/上下文:这是关于限制可以从JavaScript/Rhino调用的包的另一个问题的后续行动.接受的答案引用了关于如何做到这一点的博客条目,它需要两个步骤,第一个使用Rhino API(ClassShutter),第二个使用关闭反射和Class.forName().我想我可以使用SecurityManager更干净地完成第二步(了解SecurityManager,正如已经指出的那样,沿途是一个复杂的野兽).
总而言之,我希望(从代码,而不是设置文件)关闭Class.forName()以及对整个反射包的任何访问.
因此,经过几个小时的解决方法,目前在Google App Engine上禁用了Reflection的限制,我想知道是否有人可以帮助我理解为什么对象反射可能构成威胁.是因为我可以检查一个类的私有变量还是有其他更深层次的原因?