我在Web应用程序上使用JNLP / Java Web Start在客户端计算机上运行jar来执行某些任务。 由于我需要将几个参数(总是不同的)传递给该jar,因此JNLP文件是在服务器上动态生成的。
问题是"你想运行这个应用程序吗?"生成并运行JNLP后,每次都会显示安全提示,即使在检查了"再次显示此内容后也是如此..."选项。这可能非常不方便!
首先,该选项的文字是"请勿再次显示来自上方发布商的此应用"。 但后来我将这些属性添加到了jar的MANIFEST.MF文件中:
Application-Name: The name
Application-Library-Allowable-Codebase: *
Codebase: *
Permissions: all-permissions
这会将选项的文本更改为"不要再为来自发布商和"的应用再次显示此内容,但它仍然无法正常工作。 每次都会显示提示。
该文本不再引用该特定应用程序,但现在指的是该发布者和位置的所有应用程序。但是这些在应用程序的调用之间永远不会改变!
我错过了什么吗?或者该文字不正确?或者这是一个错误吗?
我找到的唯一解决方案是为客户端计算机创建并安装DeploymentRuleSet.jar
,这是我不喜欢的解决方案。
答案 0 :(得分:1)
此行为已被标记为"不是问题"并且已经引入了new feature in java 8u112的副作用。
当在jnlp标记中未指定href时,jnlp的位置被认为是未知的,并且直到更新java 8u112并未考虑与chekbox相关的信息。 随着报告的问题实施增强,在这些情况下,当选中复选框时,信息与"生产者"的证书一起保存。是jar的主机和jnlp文件的哈希。
但是对于具有更改部分的动态jnlp(例如参数),散列将始终不同,并且每次都会出现复选框,因为它是不同的应用程序。
现在有了好消息:
我还从jnlp标记中删除了codebase,并将绝对url放在jar资源的href参数中。使用这样的配置,应用程序不被认为是来自多个主机"并且checked标志将在Producer的证书和jar的主机上最终引用。这解决了问题:当jnlp文件改变时没有再出现警告!
警告:为了使这个技巧有效,你不应该在任何参数中使用参数href吗?其他标签。例如,我意识到在图标标签的href参数中定义了一个绝对URL使其像以前描述的那样工作(每次jnlp更改时都会出现复选框)