gpt4 book ai didi

java - 限制执行第三方软件的线程的权限

转载 作者:搜寻专家 更新时间:2023-11-01 03:26:05 27 4
gpt4 key购买 nike

我正在开发一个基于 Eclipse 的应用程序,该应用程序能够执行第三方组件(不是 eclipse 插件)。

每个组件都有一个自定义描述符,其中列出了权限(具有相应的动机)。这样最终用户可以决定是否执行它。

组件在单独的线程中执行。如何根据描述符限制这些线程的权限,而不限制整个应用程序?

最佳答案

首先,您应该打开安全管理器。然后创建一个 AccessControlContext具有所需的权限。 (在我的示例中没有权限。)最后执行AccessController.doPrivileged(...)中的第三方代码。方法。

这是一个非常简单的解决方案:

public abstract class SafeRunnable implements Runnable {

public abstract void protectedRun();

@Override
public final void run() {
CodeSource nullSource = new CodeSource(null, (CodeSigner[]) null);
PermissionCollection noPerms = new Permissions();
ProtectionDomain domain = new ProtectionDomain(nullSource, noPerms);
AccessControlContext safeContext = new AccessControlContext(
new ProtectionDomain[] { domain });

AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
protectedRun();
return null;
}
}, safeContext);
}
}

测试 SafeRunnable:

public static void main(String args[]) throws Exception {
// Turn on the security management
SecurityManager sm = new SecurityManager();
System.setSecurityManager(sm);

new Thread(new SafeRunnable() {
public void protectedRun() {
// friendly operation:
System.out.println("Hello");
}
}).start();

new Thread(new SafeRunnable() {
public void protectedRun() {
// malicious operation
System.exit(0);
}
}).start();
}

第一个线程打印 Hello,第二个线程抛出 AccessControlException: access denied ("java.lang.RuntimePermission""exitVM.0")

关于java - 限制执行第三方软件的线程的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13516766/

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