最实用的部分就是打包跟签名
最近在研究applet,打算使用applet来开发一个上传
文件上传
控件,之前因为一直觉得applet的沙箱控制导致applet不能主动的访问客户端的资源,所以也曾因此而放弃.不过最近在研究applet的签名后,有了点收获,可以通过签名jar文档来达到这样的控制策略,下面是我在实际实验过程中的一些心得和体会,跟大家一起分享下.(
注:如果转载此文,请注明出处和作者,尊重作者的劳动成果,谢谢
)
一、压缩你的class类文件为jar包
1.假设你的需要压缩的类文件存在的包为:cn.mbq.test1和cn.mbq.test2
2.进入你的classes目录,在DOS窗口中执行命令:jar cf mytest.jar cn.mbq.test1 cn.mbq.test2
3.执行命令后你会在当前目录中找到mytest.jar文件,这个就是刚才生成的档案文件。你可以修改它的后缀为rar,然后使用winrar压缩程序打开它查看看是否正确。
(说明:正确的方法应该是 jar cf mytest.jar cn/mbq/test1 cn/mbq/test2 )
二、使用keytool工具生成密匙库
1.keytool工具位于${java_home}/bin目录下;
2.在DOS窗口中执行命令:keytool -genkey -keystore mytest.store -alias mbq
注意:mytest.store 是你的密匙库的名称,可以随意修改,后缀请不要修改!
如果需要可以添加参数DOS命令
keytool -genkey -keystore mytest.store -alias mbq -validity 3650
-validity 3650 表示的是有效期是3650天,默认情况是六个月有效期。
mbq 为别名,这个也可以改成自己的名称
3.执行上述命令后,DOS窗口中会提示你输入keystore的密码、你的姓名、组织单位等等信息。这里要注意的是输入密码请记住,后面要用到的。在最后,我们输入y确认信息。然后再直接回车设置mbq的主密码和store密码一致即可!
三、使用keytool工具导出签名时用到的证书
1.在DOS窗口中执行命令:keytool -export -keystore mytest.store -alias mbq -file mbq.cert
注意:mytest.store 就是第二步生成的密匙库名称
mbq 也是在第二步中我们指定的别名
mbq.cert 为我们生成的证书的名称,可以自己修改名称,注意后缀不要改
2.命令执行成功,我们会在当前目录下找到一个mbq.cert文件,这个就是我们刚才生成的证书。
四、使用jarsigner工具签名jar压缩文档
1.jarsigner工具位于${java_home}/bin目录下;
2.在当前DOS窗口中执行命令:jarsigner -keystore mytest.store mytest.jar mbq
注意:mytest.store 就是我们在第二步中生成的密匙库名称
mytest.jar 就是我们这第一步压缩的jar文档
mbq 是提供者的名称,我们这里设置为我们的别名
修改客户端的程序是需要重新打包和签名。
五、创建mytest.policy文件
1.在当前目录下创建一个mytest.policy文件,其内容如下:
keystore"file:mytest.store","JKS";
grantsignedBy"mbq"
{
permission java.io.FilePermission"<<ALLFILES>>","read";
};
2.这个文件的意思就是说让所有由mbq签名的applet都可以对本地的所有文件进行读操作。
六、归档文件
通过上述的五个操作后,我们会在当前目录中找到如下几个文件:mytest.jar-签名后的jar文档、mytest.store-密匙库、 mbq.cert-证书、mytest.policy-访问策略文件。如果没有这些文件,那么你的applet数字签名过程就没有正确的完成,请检查上述的操作。以后,如果对打包的java文件做了修改,那么就需要重新签名一次才可以!
七、在网页中运行applet
1.假设你的applet中的主启动类为:cn.test.TestApplet.class;整个前面生成的档案文件、证书啊存储在目录:d:\test\myapplet下;
2.建立一applet_test.html文件存放在任何目录下都可以,然后内容如下:
- 1 <HTML>...</HTML><HTML>
- 2 <BODY>...</BODY><BODY>
- 3 <APPLET CODEBASE= "d:\test\myapplet" CODE= "cn.test.TestApplet.class" ARCHIVE= "mytest.jar" WIDTH= 200 HEIGHT= 100 name= "myapp" >
- 4 </APPLET>
- 5 </BODY>
- 6 </HTML>
- 01 <HTML>...</HTML><HTML>
- 02 <BODY>...</BODY><BODY>
- 03 <!-- "CONVERTED_APPLET" -->
- 04 <!-- HTML CONVERTER -->
- 05 <object
- 06 classid = "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
- 07 codebase = "http://java.sun.com/update/1.5.0/jinstall-1_5-windows-i586.cab#Version=5,0,0,3"
- 08 WIDTH = 200 HEIGHT = 100 NAME = "myapp" >
- 09 <PARAM NAME = CODE VALUE = "cn.test.TestApplet.class" >
- 10 <PARAM NAME = CODEBASE VALUE = "d:\test\myapplet" >
- 11 <PARAM NAME = ARCHIVE VALUE = "mytest.jar" >
- 12 <PARAM NAME = NAME VALUE = "myapp" >
- 13 <param name = "type" value = "application/x-java-applet;version=1.5" >
- 14 <param name = "scriptable" value = "false" >
- 15 </object>
- 16 <!--
- 17 <APPLET CODEBASE= "d:\test\myapplet" CODE= "cn.test.TestApplet.class" ARCHIVE= "mytest.jar"
- 18 WIDTH= 200 HEIGHT= 100 name= "myapp" >
- 19 </APPLET>
- 20 -->
- 21 <!-- "END_CONVERTED_APPLET" -->
- 22 </BODY>
- 23 </HTML>