我已经在Stackoverflow上阅读了很多有关此问题的问题,但无法退出找到解决方案或答案。如果已经有人给我一个提示,我将不胜感激。

我的问题/问题是,是否可以完全禁用对不可信代码的反射?像getDeclaredMethods()这样的功能(请参见test.java)。我已经有一个Java安全管理器,如果代码尝试写/读/等,它会引发安全异常。 ...

如果有可能,有人可以告诉我如何做吗?

布鲁诺

test.java

TestClass cls = new TestClass();
Class c = cls.getClass();

// returns the array of Method objects
Method[] m = c.getDeclaredMethods();
for(int i = 0; i < m.length; i++) {
   System.out.println("method = " + m[i].toString());
}

最佳答案

所以我不直接使用checkPermission()解决了问题。我的解决方法是检查是否访问了java.lang.reflect包。

@Override
public void checkPackageAccess(String pkg){

    // don't allow the use of the reflection package
    if(pkg.equals("java.lang.reflect")){
        throw new SecurityException("Reflection is not allowed!");
    }
}

10-06 09:15
查看更多