我正在设计一个用于在
Java应用程序中加载,处理和支持插件的系统.在我可以部署之前,我认为其中一个功能绝对至关重要的是能够建立一个安全环境,其中插件仅限于允许执行的操作.
我没有理解如何以编程方式使用策略文件而不在启动时运行-Djava.security.manager参数.所以这就是现在.
我的下一个想法是在我自己的SecurityManager子类中覆盖我在SecurityManager中关心的所有方法,并限制谁可以执行它们.
然后问题出现了,通过线程ID检查确定谁在询问此权限的唯一方法.因此,我设计了一个所有插件线程都驻留的系统,并且只能驻留在PluginThreads线程组中.
这工作……直到一切都开始爆炸.问题是被阻止的一些事情是由Sun的代码执行的内部操作.
因此,即使是打开窗口等最基本的操作也会失败,因为我的安全经理拒绝访问Sun的代码.使用我的线程检查方法没有任何关系,因为Sun的代码是在PluginThreads组中执行的.
所以我需要知道的是:
1)有没有办法可以找出使用当前线程调用的上下文?
2)有没有更好的方法来做这个我不知道的事情?
3)如果该方法涉及策略文件,如何将它们加载到代码中?
4)您是否可以考虑使用其他任何方法来阻止Sun的内部Java代码被阻止?