我有一个可加载插件(纯jar文件)并从中运行代码的应用程序。插件使用URLClassLoader加载。我想阻止这些插件访问文件和其他资源,同时保留我自己代码的所有权限。

以下是插件代码与我自己的应用程序及其库不同的两个功能:
1)它是由为此目的创建的URLClassLoader加载的。
2)将其jar文件复制到特定目录,URLClassLoader从该目录中获取它们。

但是我看不到如何使用这两个功能来制定策略规则。在策略规则中根本无法使用类加载器(可以理解,它是在运行时创建的)。该目录可用于授予特定权限,但不能将其删除。似乎也没有“除此目录之外的任何地方的代码”的语法。

还有其他选择吗?

最佳答案

子类URLClassLoader。重新添加您因不使用URLClassLoader.newInstance而错过的安全性位。覆盖URLClassLoader.getPermissions(CodeSource)以返回适当的权限。

如果父类加载器仅具有插件[静态]使用的常用类型,那可能是最好的。主应用程序应从其他子类加载器加载。实现类也可以通过package.access安全属性隐藏。

10-05 21:29