【发布时间】:2011-05-10 11:39:01
【问题描述】:
我一直在尝试使用自定义 SecurityManager 来沙箱化一些外部加载的代码。我拥有的 SecurityManager 工作正常。我采取了与这里许多帖子建议的方法相同的方法:每当执行潜在危险代码时设置自定义管理器,然后恢复为标准管理器。这工作正常,做我想要的。但是,该应用程序是多线程的:2 个线程使用自定义管理器,1 个使用默认管理器。这会导致受信任代码可能无法正常运行,因为另一个线程只是设置了自定义安全管理器。有没有办法解决这个问题?或者,有更好的方法吗?我看到一些帖子谈论对同一个安全管理器使用不同的策略,但我找不到一个很好的例子。非常感谢任何帮助。
【问题讨论】:
-
这是哪条路?是外部加载的代码需要(并且正在被授予)更高的权限吗?
-
外部加载的代码应该有最小权限,主代码/主线程(加载外部代码)应该有所有权限。
-
我们也遇到过类似的问题,据我所知,安全管理器是唯一的,并且为整个虚拟机共享,您不能同时拥有不同的安全管理器。您将不得不在同步块或类似的东西中运行您的线程代码的某些部分(丑陋)
-
好的 - 我的建议将与下面彼得的建议一致。
-
我采取了与这里许多帖子建议的方法相同的方法:在执行潜在危险代码时设置自定义管理器,然后恢复为标准管理器。 呃,谁有建议这样做?您始终可以确定调用线程和调用 AccessControlContext ......这就是不应该这样做的方式(简而言之,设置/取消设置 SM 不是要走的路)
标签: java multithreading security securitymanager