Java 安全策略:根据类加载器授予访问权限

khi*_*sen 5 java security

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

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

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

还有其他选择吗?

Tom*_*ine 2

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

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