Str*_*tly 8 java securitymanager
Java安全管理器方法checkMemberAccess()有一个参数,其中包含要调用Reflection的类.不推荐使用此方法,checkPermission()而是使用说明来代替使用.没有任何参数checkPermission()类似于中的参数checkMemberAccess().
在安全管理器中,如何在没有checkMemberAccess()方法的情况下获取Reflection目标类?
即如果A类对B类进行反思,我想知道目标是B类.
当您安装默认安全管理器时,应用程序将使用默认安全策略。如果您想提供我们自己的策略,您可以在策略文件中执行此操作,如下所示:
grant {
permission java.lang.RuntimePermission "accessDeclaredMembers.{class name}";
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
};
Run Code Online (Sandbox Code Playgroud)
CheckMemberAccess有默认策略 - 允许访问 PUBLIC 成员,以及访问与调用者具有相同类加载器的类。在所有其他情况下,此方法使用RuntimePermission("accessDeclaredMembers")权限调用checkPermission()
对于反射操作,请使用ReflectPermission类和suppressAccessChecks,它允许抑制标准 java 访问检查 - 对于公共、默认(包)访问、受保护和私有成员 - 由反射对象在其使用点执行。
但这在该信息中是危险的(可能是机密信息)和方法可能会被恶意代码访问。
提供策略文件后 - 您可以按如下方式检查:
try {
ReflectPermission permission = new ReflectPermission("suppressAccessChecks");
permission.checkGuard(null);
System.out.println("Permission granted");
} catch (SecurityException e) {
System.out.println("Permission denied");
}
Run Code Online (Sandbox Code Playgroud)