- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
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/53709444/
我试图了解在哪些条件下允许调用 Method.setAccessible()。据我了解各种文档,调用 setAccessible() 会触发 SecurityManager 中的检查以查看是否允许更改
Java 中的 SecurityManager 是否有任何方法可以根据调用 setAccessible() 的详细信息选择性地授予 ReflectPermission("suppressAccessC
我正在尝试将 spring-boot 应用程序部署到 tomcat。不幸的是,我们无法控制 tomcat。 我收到以下错误: Caused by: java.security.AccessContro
我是一名优秀的程序员,十分优秀!