Ale*_*ria 5 java permissions rcp multithreading eclipse-rcp
我正在开发一个基于 Eclipse 的应用程序,能够执行第三方组件(不是 eclipse-plugin)。
每个组件都有一个列出权限(以及相应动机)的自定义描述符。这样最终用户可以决定是否执行它。
组件在单独的线程中执行。如何根据描述符限制这些线程的权限,而不限制整个应用程序?
小智 3
首先,您应该打开安全管理器。然后创建具有所需权限的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);
}
}
Run Code Online (Sandbox Code Playgroud)
测试 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();
}
Run Code Online (Sandbox Code Playgroud)
第一个线程打印 Hello,第二个线程抛出AccessControlException: access denied ("java.lang.RuntimePermission" "exitVM.0")
| 归档时间: |
|
| 查看次数: |
2699 次 |
| 最近记录: |