最近在研究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压缩程序打开它查看看是否正确。
二、使用keytool工具生成密匙库
1.keytool工具位于${java_home}/bin目录下;
2.在DOS窗口中执行命令:keytool -genkey -keystore mytest.store -alias mbq
注意:mytest.store 是你的密匙库的名称,可以随意修改,后缀请不要修改!
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>
注意:其中的CODEBASE就是你的类的基础目录,CODE也就是你的APPLET的启动主类,ARCHIVE也就是签名后的JAR文档。
2.然后在IE中打开该html文件,那么会看到IE提示你是否信任该插件,也就是说我们的证书起作用了,然后确定运行后,就可以在页面上看到applet的运行效果了。
但是由于SUN和MS的问题,目前IE并不支持最新的JRE,而是使用MS自己开发的JRE,所以这个也是影响APPLET发展壮大的一个原因。而且正是由于这个原因,SUN的java-plugin技术才会出现。使用SUN的java-plugin技术我们就可以在applet中使用最新的JAVA类库了。由于IE在遇到APPLET标签的时候会调用自己的JRE,但是如果客户机器上安装的JRE不是我们想要的版本,那么就会出错了。所谓java-plugin技术就是利用IE的插件机制来制定我们想要的JRE,我们可以在IE中使用OBJECT标签来调用APPLET,这样就不会引用MS的JRE了,从而达到我们想要的效果,而且java-plugin技术不仅仅支持IE,还支持Navigator等浏览器。不过我们需要编写比较复杂的HTML代码了,但是这一且SUN已经帮我们做到了,呵呵,在JDK1.4或更高的版本中SUN提供了一个HtmlConverter.exe工具来帮助将包含applet标签的html转换成包含OBJECT和EMBED标签的html代码,该工具位于${java_home}/bin目录下,对于1.4以前的版本该工具则是单独提供的,不过现在几乎都是1.4或1.5甚至更高版本的JDK了吧,呵呵。
该工具很简单,是图形化的工具,我们直接运行即可。比如我将上面的包含applet的html转换后(比如我选择只支持IE的),其代码变成了如下:
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>
注意其中的OBJECT标签,可以看到APPLET标签已经被注释掉了。其中PARAM NAME=NAME这一行中的myapp就是我们applet应用程序的名称,在IE提示的确认运行中显示的就是这个名称了,我们可以改为自己的公司或组织的名称。然后提示的提供者也就是我们在签名时用到的名称了。
另外,还要特别注意的就是这个包含OBJECT标签的html页面必须和你的mytest.jar压缩文档放在同一个目录下,这样才可以正确的加载,否则会一直报ClassNotFound的异常的,即使我们在OBJECT标签中指定了CODEBASE也不行,这个是我在测试的时候遇到的问题!
八、在Internet上应用签名的applet
如果要把applet部署在网络上,那么最好是采用OBJECT标签的形式,同时也要兼顾采用EMBED标签来支持诸如FF等浏览器。我们把已签名了的mytest.jar和我们的网页放在同一个目录下,至于其他的如mytest.store和mbq.cert可以不用放在一起,至少我在测试的过程中没有放到一起也不会出错,而且在不同的机器上运行的也非常好,可以读取客户端机器的资源!另外,也发现mytest.policy其实也没什么用处,因为这是参考网络上的,而且他们的版本都是1.3左右,所以估计是版本低的缘故吧!
到此,我们就已经完成了applet的签名到部署,以及到实际的网络应用中了。这样我们使用applet来开发控件时就不会因为无法读取客户端资源而放弃了,呵呵~~
分享到:
相关推荐
### JAVA程序设计语言Applet应用程序知识点详解 #### 1. Java程序分类 Java程序主要分为两类:Java Application 和 Java Applet。 - **Java Application**:这类程序是独立运行的Java程序,通常具备`main`方法作为...
总结一下,Ant打包Applet并添加数字签名涉及到的主要步骤包括:配置Ant的build.xml文件,定义编译和打包的目标,设置JAR的manifest信息,使用`jarsigner`对JAR文件进行签名,并确保所有操作符合Java的安全策略。...
JavaApplet是一种基于Java平台的小型应用程序,常用于网页中以提供交互性的功能。在JavaApplet中,数字签名是一个至关重要的概念,它确保代码的完整性和来源的可信性,防止恶意篡改。本篇文章将深入探讨JavaApplet的...
Java Applet是早期Java技术的一种实现,它允许开发者创建可以在Web浏览器中运行的小型应用程序。然而,由于Applet涉及到在用户计算机上执行代码,因此安全问题尤为重要。为了解决这个问题,Java引入了数字签名机制,...
在“Java Applet小程序的数字签名和客户端认证.pdf”文档中,可能会详细解释如何进行Applet的签名过程,包括获取数字证书、使用工具如 jarsigner 进行签名,以及如何处理客户端的证书导入和权限设置。此外,文档可能...
本文重点介绍了如何利用Java开发工具包(JDK)提供的签名工具、密钥管理工具和策略编辑器等工具,对Java Applet小程序实施数字签名和认证的方法,这种方法能够在保证安全的同时赋予“可信的”Java小程序更多的特权。...
NULL 博文链接:https://stephen830.iteye.com/blog/254549
在IT行业中,Ant是一个常用的构建自动化工具,由Apache软件基金会开发。它主要用来自动化Java项目的构建过程,...通过熟练运用Ant,开发者可以自动化复杂的构建流程,同时数字签名则为网络上的Java应用提供了安全保障。
Applet应用程序是Java编程语言中的一种特殊类型,它主要用于在Web浏览器中运行。Applet是Java平台早期的主要特性之一,允许开发者创建交互式的、嵌入到HTML页面中的小程序。这个"AppletDemo"很可能是展示如何创建和...
Java Applet应用程序是Java语言的一种特殊类型,它可以在Web浏览器中运行,为用户提供交互式的功能。Applets在1990年代初期随着Java语言的兴起而流行,它们被用来增强网页的动态性和交互性,比如游戏、动画或者简单...
第八章Applet应用程序(java)主要涉及Java Applet的基础知识、运行原理、生命周期以及在HTML中的标记使用和多媒体技术的支持。以下是对这部分内容的知识点梳理。 知识点1:Web应用基础 1. Internet概述:它是由全球...
Java Applet 小程序开发指南 在本文中,我们将详细介绍 Java Applet 小程序的开发过程,从编写代码到运行小程序的每一个步骤。通过本文,读者将了解 Java Applet 小程序的基本概念和开发技术。 标题解释 Applet 小...
Java课件第九章Applet应用程序.ppt
PBOC电子钱包应用Applet源程序 PBOC电子钱包应用Applet源程序
Java 2下的Applet数字签名是确保Web应用程序安全和可信的关键环节。理解并正确实施这一过程对于开发安全的Java Applet至关重要。随着技术的演进,虽然Applet的使用逐渐减少,但其背后的数字签名概念在现代Web开发中...
在Java编程环境中,Applet是一种嵌入到网页中的小程序,它可以提供交互式的用户界面和一些基本功能。然而,出于安全考虑,Java Applet运行在浏览器的“沙箱”环境中,这个环境限制了Applet的权限,例如阻止它访问...
Java Applet程序是一种在Web浏览器中运行的小型Java应用程序,它是Java技术早期为了实现动态网页交互而设计的。本PPT将深入讲解Java Applet的基本概念、工作原理以及如何在实际开发中应用。 1. **Java Applet简介**...