使用Java 7更新51的Java Web Start安全性对话框

时间:2014-01-18 16:56:29

标签: java security java-web-start

我构建了一个使用有效证书签名的Java Web Start应用程序。

当我为应用程序加注星标时,安全对话框会正确显示,如图所示

http://www.java.com/en/img/download/trusted_signed.jpg

我的问题是关于“不再显示”复选框。

如果属性href出现在jnlp文件的jnlp标记中,则会出现复选框。

如果该属性不存在,则不会出现复选框,并且每次都需要确认运行。

(实施例: < jnlp spec =“1.0+”codebase =“http://docs.oracle.com/javase/tutorialJWS/samples/deployment/webstart_ComponentArch_DynamicTreeDemo”href =“dynamictree_webstart.jnlp”>

这是一个问题,因为我的jnlp文件位于受密码保护的目录下,如果指定了href,Java Web Start应用程序会尝试将其作为其他资源检索。 (导致拒绝访问,因为只对浏览器会话进行了身份验证并且运行失败)

部署Java Web Start应用程序的文档说:

在部署至少在Java SE 6更新18版本或更高版本上运行的Java Web Start应用程序时,codebase和href属性是可选的。在部署将使用以前版本的Java Runtime Environment软件运行的Java Web Start应用程序时,必须指定codebase和href属性。

什么是正确的代码?使用href还是没有?

这是BUG还是功能?

如何在不指定href属性的情况下显示“不再显示”复选框?

1 个答案:

答案 0 :(得分:2)

经过大量的搜索和测试后,我们发现只有这些两种方式才能在JRE 1.7.0_51&显示预期的安全性对话框(“不再显示此...”复选框):

1)如上所述,使用启动文件自引用添加href =,例如:

jnlp spec="1.0+" codebase="http://some.dn.com/OurAppHome/"  href="launch.jnlp"

对于通过ASP产生JNLP的网站,或者像上面提到的其他条件,这不是直截了当的。

2)正确的事情:JAR表明它在控制台日志中没有显示 Missing Blah-Blah-Blah清单属性。我们发现的7u51的最小附加清单属性必须存在( * s作为测试值):

Permissions: all-permissions
Codebase: *
Application-Library-Allowable-Codebase: *

因此,我们正在运行的完整构建脚本测试清单看起来像这样(生成版本):

         <manifest>
             <attribute name="Application-Name" value="Our App Name"/>
             <attribute name="Main-Class" value="com.whatever.main.AppLoader"/>
             <attribute name="Class-Path" value="./Corejar.jar ./Support.jar"/>
             <attribute name="Built-By" value="${user.name}"/>
             <attribute name="Permissions" value="all-permissions"/>
             <attribute name="Codebase" value="*"/>
             <attribute name="Application-Library-Allowable-Codebase" value="*"/>
             <attribute name="Trusted-Only" value="true"/>
             <attribute name="Specification-Title" value="Our App Name"/>
             <attribute name="Specification-Version" value="${version}"/>
             <attribute name="Specification-Vendor" value="Our Company Name"/>
         </manifest>