Java 安全管理器方法checkMemberAccess() https://docs.oracle.com/javase/7/docs/api/java/lang/SecurityManager.html#checkMemberAccess(java.lang.Class,%20int)有一个参数,其中包含正在调用反射的类。此方法已被弃用,并有说明说要使用checkPermission()
反而。里面没有参数checkPermission()
与那些相似的checkMemberAccess()
.
在安全管理器中,如何在没有checkMemberAccess() https://docs.oracle.com/javase/7/docs/api/java/lang/SecurityManager.html#checkMemberAccess(java.lang.Class,%20int) method?
即如果 A 类对 B 类执行反射,我想知道target是B级。
当您安装默认安全管理器时,应用程序将使用默认安全策略。如果您想提供我们自己的策略,您可以在策略文件中执行此操作,如下所示:
grant {
permission java.lang.RuntimePermission "accessDeclaredMembers.{class name}";
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
};
检查会员访问权限具有默认策略 - 允许访问 PUBLIC 成员,以及访问与调用者具有相同类加载器的类。在所有其他情况下,此方法调用检查权限()与RuntimePermission("accessDeclaredMembers")允许
对于反射操作,请使用反映权限类和抑制访问检查它允许抑制标准 java 访问检查 - 对于公共、默认(包)访问、受保护和私有成员 - 由反射对象在其使用点执行。
但这在该信息中是危险的(可能是机密的)并且通常不可用的方法将被恶意代码访问。
提供策略文件后 - 您可以按如下方式检查:
try {
ReflectPermission permission = new ReflectPermission("suppressAccessChecks");
permission.checkGuard(null);
System.out.println("Permission granted");
} catch (SecurityException e) {
System.out.println("Permission denied");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)