如何去掉在浏览器中打开java applet时的警告对话框
好久没更新博客了!
最近,由于项目要求,需要将swing开发的一个桌面程序转换为Applet并嵌入到web中。转换工作很快就完成了,但是在嵌入到web以后,每次访问applet都会弹出一个警告对话框,大体的意思说是applet包含了不受信的代码,提示你是否要阻止运行,如果不细看提示,很容易就点击了是,结果applet就不会运行了。
通过看对话框中的提示,对applet中的所有jar都进行了签名,再次访问还是出现了警告对话框,再看,发现提示说applet中包含了签名和未签名的代码(资源)。我们知道java的签名只会对jar包中的class进行签名,而不会对其中的资源文件进行签名,这就导致为什么签名了还是会出现警告。于是到oracle官网去寻找答案,找到以下有用的链接:http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/mixed_code.html
这篇文章里面提到了两种方法,分别是针对用户和开发人员(或者部署人员的)。最终用户可以通过修改控制面板中java的设置来处理applet如何运行混合的代码。另一种针对开发人员的方式就是修改jar包中的清单文件(manifest )配置,可以通过设置两个属性Trusted-Only属性和Trusted-Library属性来控制applet在浏览器的运行。
其中Trusted-Only针对那些不需要不受信控件的applet或application,设置了Trusted-Only不会去加载不受信的classes或者资源。
而相对应的Trusted-Library就是允许applet或application使用那些不受信的控件,同时不会弹出警告对话框。Trusted-Library会阻止受信任的组件去使用不受信任的组件。
通过上面的这些信息,已经找到了去掉对话框的办法了,那就是修改applet使用到的所有jar包的manifest文件,添加Trusted-Library属性,然后再签名。
问题:在上面的过程中,遇到一个问题就是一个第三方的jar已经签名了,这个时候你修改了它的manifest文件,然后再签名就会报错,签名失败。这时可以删除META-INF目录中的.DSA和.SF文件,然后把MANIFEST.MF中的签名信息手动删掉,再次签名即可。
MANIFEST.MF中的签名信息格式如下:
Name: resources/language/lang.xml
SHA1-Digest: vC76jNzoYHDH4JE/oV+/gp92F9o=
至此问题解决。