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

5
我有一个应用程序,它加载插件(普通的jar文件)并从中运行代码。这些插件是使用URLClassLoader加载的。我想防止这些插件访问文件和其他资源,同时保留我的代码的所有权限。
以下是插件代码与我的应用程序及其库不同的两个特征: 1)它由此目的创建的URLClassLoader加载。 2)它的jar文件被复制到特定目录中,URLClassLoader从中获取它们。
但我不知道如何使用这两个特征来制定策略规则。类加载器不能在策略规则中使用(可以理解,它是在运行时创建的)。该目录可以用于授予特定权限,但无法收回权限。似乎也没有“除了此目录之外的任何地方的代码”的语法。
还有其他选项吗?
1个回答

2

子类化 URLClassLoader。添加回从不使用 URLClassLoader.newInstance 而错过的安全位。重写 URLClassLoader.getPermissions(CodeSource) 方法以返回适当的权限。

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


我在这个问题中实现了这个解决方案:http://stackoverflow.com/questions/26340118/extending-urlclassloader-and-overriding-getpermissions-does-not-work - 但是我无法让它工作,你能否看一下并指出缺陷? - skiwi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接