- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
Java 中的 SecurityManager 是否有任何方法可以根据调用 setAccessible() 的详细信息选择性地授予 ReflectPermission("suppressAccessChecks")?我看不出有什么办法可以做到这一点。
对于某些沙盒代码,允许调用 setAccessible() 反射 API 将非常有用(例如用于运行各种动态 JVM 语言),但仅在调用 setAccessible() 时在源自沙盒代码的类的方法/字段上。
如果这不可能,除了选择性授予 ReflectPermission("suppressAccessChecks") 之外,还有其他建议吗?如果 SecurityManager.checkMemberAccess() 具有足够的限制性,也许在所有情况下都可以安全授予?
最佳答案
也许查看调用堆栈就足以满足您的目的?像这样的东西:
import java.lang.reflect.ReflectPermission;
import java.security.Permission;
public class Test {
private static int foo;
public static void main(String[] args) throws Exception {
System.setSecurityManager(new SecurityManager() {
@Override
public void checkPermission(Permission perm) {
if (perm instanceof ReflectPermission && "suppressAccessChecks".equals(perm.getName())) {
for (StackTraceElement elem : Thread.currentThread().getStackTrace()) {
if ("Test".equals(elem.getClassName()) && "badSetAccessible".equals(elem.getMethodName())) {
throw new SecurityException();
}
}
}
}
});
goodSetAccessible(); // works
badSetAccessible(); // throws SecurityException
}
private static void goodSetAccessible() throws Exception {
Test.class.getDeclaredField("foo").setAccessible(true);
}
private static void badSetAccessible() throws Exception {
Test.class.getDeclaredField("foo").setAccessible(true);
}
}
关于java - Java 中的 SecurityManager 有没有办法选择性地授予 ReflectPermission ("suppressAccessChecks")?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2315066/
Java 中的 SecurityManager 有没有办法根据调用 setAccessible() 的详细信息选择性地授予 ReflectPermission("suppressAccessCheck
Java 中的 SecurityManager 是否有任何方法可以根据调用 setAccessible() 的详细信息选择性地授予 ReflectPermission("suppressAccessC
我正在尝试将 spring-boot 应用程序部署到 tomcat。不幸的是,我们无法控制 tomcat。 我收到以下错误: Caused by: java.security.AccessContro
我是一名优秀的程序员,十分优秀!