Restricting permissions of threads that execute third party software(限制执行第三方软件的线程的权限)
问题描述
我正在开发一个基于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 中,如何将 String 转换为 char 或将 char 转换 2022-01-01
- 获取数字的最后一位 2022-01-01
- Eclipse 的最佳 XML 编辑器 2022-01-01
- 将 Java Swing 桌面应用程序国际化的最佳实践是什么? 2022-01-01
- GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时? 2022-01-01
- java.lang.IllegalStateException:Bean 名称“类别"的 BindingResult 和普通目标对象都不能用作请求属性 2022-01-01
- 未找到/usr/local/lib 中的库 2022-01-01
- 如何使 JFrame 背景和 JPanel 透明且仅显示图像 2022-01-01
- 转换 ldap 日期 2022-01-01
- 如何指定 CORS 的响应标头? 2022-01-01