项目中使用的是APPLET打印,在实现过程中遇到一些问题,特总结如下。
首先要将Applet数字签名,授予访问本地资源,读写权限设置
步骤一:将Applet Class打成Jar包
jar -cvf MyApplet.jar .
步骤二:生成证书及签名
1、keytool -genkey -keystore 7csky.store -alias 7csky
这个命令用来产生一个密匙库,执行完毕后应该在当前目录中产生一个7csky.store的文件,这里的7csky是我自己定义的名字,你可以对它进行修改。另外在执行命令的时候还有提示你输入密匙库的密码,这里你一定要记住,否则后面要用的时候无法输入。
2、keytool -export -keystore 7csky.store -alias 7csky -file 7csky.cert
这个命令用来产生签名时所要用的证书,同样这里的7csky也可以换成你自己需要的名字。这个命令执行完后在当前目录中产生一个7csky.cert的文件。
3、 jarsigner -keystore 7csky.store MyApplet.jar 7csky
这个命令用上面产生的证书将我们的jar文件进行了签名。
步骤三:新建一个策略文件,并把这些策略文件加入(修改文件)
1.新建applet.policy的文件,其内容如下:
keystore "http://192.168.200.35/JYDA/security/7csky.store","JKS";
grant signedBy "7csky"{ permission java.io.FilePermission "<<ALL FILES>>", "read,write";};
grant signedBy "7csky"{ permission java.io.FilePermission "<<ALL FILES>>", "read,write";};
代表授与当前已经签名的APPLET对文件系统的所有文件读写权限。
2、 修改${java.home}/jre/lib/security目录下的java.security,找到下面这两行:
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
第二行代表当前用户的策略文件。一般都没有。
在下面添写第三行
policy.url.3=http://192.168.200.35/JYDA/security/7csky.store
完成这个修改后我们在前面创建的applet.policy文件才有效。
另外,在使用APPLET打印时,即使已经对APPLET签名了,有些浏览器还是会弹出有APPLET请求打印机操作的警告框,需要在策略文件中增加如下配置。
permission java.lang.RuntimePermission "queuePrintJob";
permission java.net.SocketPermission "127.0.0.1:1024", "listen,connect";
注意:
在linux下的firefox中试了一下,发现有时firefox无法正常显示applet。发生这种情况的原因是由于firefox未安装jdk插件,读者可按如下的方法为linux版的firefox安装jdk插件:
jdk插件的库文件是libjavaplugin_oji.so,这个文件在<JDK安装目录>/jre/plugin/i386/ns7目录中,其中ns7根据当前jdk版本不同而有所差异,但前两个字母都为ns。在linux下,jdk一般都安装在/usr/java目录中。
找到libjavaplugin_oji.so文件后,再进行<firefox的安装目录>/plugins目录中,使用如下的命令为libjavaplugin_oji.so文件添加一个符号链接:
ln -s <jdk安装目录>/jre/plugin/i386/ns7/libjavaplugin_oji.so
重启Firefox,再访问applet.jsp页面,就可以正常显示applet了。
另:在html页面中,用javascript调用applet的方法时,同样不能访问客户端本地文件。只有在applet内部才可以访问本地文件。