限制执行第三方软件的线程的权限 [英] Restricting permissions of threads that execute third party software

查看:47
本文介绍了限制执行第三方软件的线程的权限的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个基于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")

这篇关于限制执行第三方软件的线程的权限的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆