gpt4 book ai didi

java - 使用 AllPermission 启用 Java SecurityManager

转载 作者:搜寻专家 更新时间:2023-10-30 21:26:23 25 4
gpt4 key购买 nike

我试图让自己熟悉 SecurityManager 但即使是这个简单的场景也会失败。当我从我的 IDE 内部或命令行运行以下命令时,我得到以下 exception ;

access denied ("java.util.PropertyPermission" "java.home" "read")

我以为我允许了这段代码的一切:

Policy.setPolicy(new Policy() {

@Override
public PermissionCollection getPermissions(CodeSource codesource) {
Permissions perm = new Permissions();
perm.add(new AllPermission());
return perm;
}
});
System.setSecurityManager(new SecurityManager());
System.out.println(System.getProperty("java.home"));

这与 JVM 的派生策略有关吗?我怎样才能干净地 setPolicy()

同样的误解似乎发生在下面的代码中:

System.setSecurityManager(new SecurityManager());
final Permissions allPermission = new Permissions();
allPermission.add(new AllPermission());
AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
System.out.println(System.getProperty("java.home"));
return null;
}, new AccessControlContext(new ProtectionDomain[]{new ProtectionDomain(null, allPermission)}));

更新:第二种情况是可以理解的,因为提供的权限只是进一步的限制:(javadoc) 该操作是通过调用者的保护域所拥有的权限的交集执行的,以及由指定的 AccessControlContext

表示的域所拥有的那些

最佳答案

我能够用额外的 Policy.getPolicy() 重新创建您的案例在 Policy.setPolicy() 调用之前,它影响行为的原因是通过 get policy 调用,您会触发默认策略创建,以及来自 java.policy 的权限> 已设置,但没有 setSecurityManager() 它们不会被激活,这就是当您执行自定义 AllPermission 策略集时,您仍然会得到 的原因java.util.PropertyPermission""java.home""read" 问题,因为许多此类默认策略未被设置的策略覆盖。确实非常困惑的结构。

Policy.getPolicy();
Policy.setPolicy(policyWithAllPermission);
System.setSecurityManager(new SecurityManager());
System.out.println(System.getProperty("java.home"));
// results in 'access denied ("java.util.PropertyPermission" "java.home" "read")'

但是如果你使用下面的自定义策略;

Policy allPermissionPolicy = new Policy() {

@Override
public boolean implies(ProtectionDomain domain, Permission permission) {
return true;
}
};

它覆盖了所有权限定义,并允许所有操作通过,这是对这种混淆的可能修复。

关于java - 使用 AllPermission 启用 Java SecurityManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53143074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com