2

自 Oracle 上次 Java 更新 (1.7.0u45) 以来,我不得不尝试理解Permissions和类似的 MANIFEST 标签,因为它们现在是正确 JNLP 操作所必需的。特别是有一个方面,我仍然觉得有点难题。

特别是,我有一些 Jar 文件只包含ClassLoader.getResource我在几个稍微不同的程序之间共享的资源(“资源”,即 )。因此,我将它们自己放在了一个扩展 JNLP 中,我从不同程序的各种 JNLP 文件中链接了该扩展。这些 Jar 文件只包含数据文件,没有任何类文件。

由于它们不包含代码,我认为此 JNLP 扩展不需要任何权限,因此我之前已将其配置为这样,<security />在 JNLP 文件中只有一个空标记。现在 Jar 文件需要它们自己的Permissions声明,因此我将它们声明为Permissions: sandbox.

奇怪的是,只要我这样做,需要的程序本身Permissions: all-permissions似乎根本找不到资源。就像文件不存在一样ClassLoader.getResourceAsStream简单地返回。null但是,如果我使用声明重新声明资源 Jar 文件Permissions: all-permissions并将相应的<all-permissions />标记添加到扩展 JNLP 文件中,它就会开始工作。

然而,对于最新的 Java 更新,这实际上并不是什么新鲜事。我也有一个旧的 Java 1.6 安装,只要 Jar 文件有Permissions声明,它就会做同样的事情(但是,如果我完全删除Permissions声明,它就会像往常一样开始工作)。这使我认为这是预期的行为,并在 JNLP 规范中的某处定义。但是,我找不到任何关于它的信息。

我对这个“解决方案”有点不安,只是猜测,不知道它是否是“正确”的方法。因此,我的问题是:这种行为在哪里定义?我想权威地阅读它并正确理解它。

4

0 回答 0