2

我一直在尝试使用自定义 SecurityManager 来沙箱化一些外部加载的代码。我拥有的 SecurityManager 工作正常。我采取了与这里许多帖子建议的方法相同的方法:每当执行潜在危险代码时设置自定义管理器,然后恢复为标准管理器。这工作正常,做我想要的。但是,该应用程序是多线程的:2 个线程使用自定义管理器,1 个使用默认管理器。这会导致受信任代码可能无法正常运行,因为另一个线程只是设置了自定义安全管理器。有没有办法解决这个问题?或者,有更好的方法吗?我看到一些帖子谈论对同一个安全管理器使用不同的策略,但我找不到一个很好的例子。非常感谢任何帮助。

4

3 回答 3

3

您的 SecurityManager 可以检查哪个线程正在运行。一个简单的本地线程将执行此操作,但是,您可能需要一个 InheritableThreadLocal 以便创建的任何其他线程“继承”线程安全级别。

于 2011-05-10T12:18:14.643 回答
3

您为整个应用程序使用一个安全管理器。Java 安全框架旨在处理这种情况。让事情工作的方式是使用策略文件的代码库功能,它使您能够为不同的代码库分配不同的权限。您可以分配您的“主要”代码库“所有权限”,它将正常运行。您可以将任何导入的代码分配给受限制的代码库。

这一切都在这里大量记录,可能与此问题最相关的部分是策略文件信息

于 2011-05-10T14:19:18.587 回答
0

测试当前线程或删除安全限制不是一个好主意。就像一个例子,假设不受信任的代码有一个喜欢睡觉的终结器?

于 2011-05-10T14:03:16.260 回答