当前位置: 代码迷 >> Web前端 >> APPLET打印的一些小结
  详细解决方案

APPLET打印的一些小结

热度:83   发布时间:2012-07-20 10:38:30.0
APPLET打印的一些总结
项目中使用的是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内部才可以访问本地文件。