我在一家公司开发,使用jnlp文件启动基于swing的web java应用程序。它有很多jar包被下载到客户端的jvm缓存中。当我将我的jvm更新到当前最新版本(构建1.7.0_45-b18)时,我尝试运行jnlp文件时看到了下面的安全警告:
当我看到这个错误并阅读了来自Oracle网站的有关签署jnlp文件的文章(Signing JNLP files)后,我向项目中添加了三个内容:
- 一个JNLP-INF文件夹,包括除第三方文件之外的所有jar文件中的APPLICATION.JNLP文件。
- 使用我的公司的数字证书+密钥库捆绑包对所有这些jar文件进行签名。
- 通过Java控制面板将数字证书导入我的受信任CA证书中。
在进行了上述更改并在部署新的jar文件后尝试运行jnlp文件时,我从jvm收到了以下安全警告信息:
- 我应该尝试签署所有第三方jar吗?如果是,我该如何使用Ant命令执行此操作?我该如何提取第三方jar并添加其中的JNLP-INF文件夹,然后使用Ant将其重新打包成jar文件?
- 我是否还应该使用JNLP-INF子文件夹对最终的myapplication.ear文件进行签名?该ear文件部署到jboss服务器上?
- 我是否应该在jar文件的META-INF/MANIFEST文件中添加一些额外的行?
- 我是否应该期望Oracle阻止我的应用程序在具有此警告级别的jvm上运行?
我的JNLP文件是这样的文本:
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://10.100.10.9/ikarusdelhitest/" href="ikarus.jnlp">
<information>
<title>Ikarus</title>
<vendor>My Company name</vendor>
<homepage href="http://www.mycompanyname.com" />
<description>My jnlp triggered web based enterprise software</description>
<icon href="ikarus.ico" />
<offline-allowed />
</information>
<security>
<all-permissions />
</security>
<resources>
<j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"
java-vm-args="-Xnoclassgc -Xincgc -client -XX:DefaultMaxRAM=208M -Xms64M -Xmx256M -XX:PermSize=32M -XX:MaxPermSize=128M -XX:MinHeapFreeRatio=15 -XX:MaxHeapFreeRatio=50" />
<jar href="jars/ikarus/ikarusClient.jar" />
<jar href="jars/ikarus/ikarusDelegators.jar" />
<jar href="jars/ikarus/clientRules.jar" />
<jar href="jars/ikarus/ruleImps.jar" />
<jar href="jars/ikarus/ikarusUtil.jar" />
<jar href="jars/ikarus/ikarusResources.jar" />
<jar href="jars/ikarus/domain.jar" />
<jar href="jars/ikarus/domain_repository.jar" />
<jar href="jars/ikarus/domain_service.jar" />
<jar href="jars/ikarus/app_repository.jar" />
<jar href="jars/ikarus/app_service.jar" />
<jar href="jars/ikarus/infrastructure.jar" />
<jar href="jars/ikarus/integration_domain.jar" />
<jar href="jars/jboss_ejb_auth/ejb3-persistence.jar" />
<jar href="jars/jboss_ejb_auth/jboss-ejb3x.jar" />
<jar href="jars/jboss_ejb_auth/jbossall-client.jar" />
<jar href="jars/jasper/commons-beanutils-1.8.0.jar" />
<jar href="jars/jasper/commons-collections-3.2.1.jar" />
<jar href="jars/jasper/commons-digester-1.7.jar" />
<jar href="jars/jasper/commons-logging-1.1.jar" />
<jar href="jars/jasper/iText-2.1.0.jar" />
<jar href="jars/jasper/jasperreports-3.6.0.jar" />
<jar href="jars/jasper/poi-3.2-FINAL-20081019.jar" />
<property name="jnlp.localization" value="Delhi"/>
</resources>
<application-desc main-class="com.celebi.ikarus.main.Ikarus" />
感谢任何帮助/评论/头脑风暴。
java-vm-args
,但请注意,大多数与内存相关的选项可以以一种不需要签署JNLP的方式指定。您可以尝试使用这些选项来查看是否适用于您的应用程序。 - Andrew Thompson