- 论坛徽章:
- 0
|
Java Applet操纵本地扫描仪技术
————基于JDK1.3
交管局项目的软件
系统采用了基于Java的B/S结构,服务器端采用Unix操作系统、Oracle数据库,需要在客户端用扫描仪扫描图片后上传到服务器端的Oracle数据库中,考虑到B/S结构、基于Java等特点,操纵本地扫描仪最优的办法是采用Java Applet技术,具体技术实现如下:
一、 技术难点
Java Applet操纵本地扫描仪主要有以下的技术难点:
1. JDK Sandbox的限制:出于安全性考虑,普通的Java Applet的只能运行于JDK的Sandbox之中,不能访问本地文件系统,不能建立除它所在服务端之外的网络连接等等,要操纵本地扫描仪就需要突破这些限制。
2. Java语言本
身的限制:Java是一种跨平台的语言,由于要考虑到跨多种操作系统的运行,所以它也就丧失了直接操纵本地硬件系统的特性,因而要在Java中操纵扫描仪
只能通过JNI技术(即Java Native Interface),通过Java本地接口调用扫描仪驱动软件,完成扫描。
3. 其它技术难点:主要是涉及到Java数字签名技术,包括密钥对的生成和保存,证书文件的到如何到出,本地策略文件的配置,Jar文件的签署,证书的认证,软件的发布等等;采用Swing控件的Applet的网页的编写;服务器端和客户端文件的部署。
二、 问题的解决思路:
以上存在的技术难点需要逐一解决:
1. 突破JDK Sandbox的控制:首先需寻找方法,突破JDK Sandbox的控制,使Java Applet获得比较大以至全部的访问权限,可以访问本地文件系统,操纵本地硬件设备。
2. 解决Java操纵硬件设备的限制:需要通过查找资料,寻求一个相对来说比较简单的操纵扫描仪的方法。
三、 实际解决方法和采用的技术
1. 突破JDK Sandbox限制的解决方法:
通过查找资料和与其他人交流,找到突破JDK Sandbox限制的两个方法:
1)修改本地JRE(Java 2 Runtime Environment)策略文件java.policy,在其中加上一段代码:
grant codeBase"URL" {
permission java.security.AllPermission;
};
其中的URL是你要运行的Jar文件的地址,这样此Applet即可获得所有权限
2)采用数字签名Jar文件,使其获得相关的访问权限:具体实现如下:
Ø 生成密钥及密钥库:
keytool –genkey –keystore dragon.store –alias jizd
这个命令用来产生一个密匙库,执行完毕后应该在当前目录中产生一个dragon.store的文件,其中存放着一对密钥,这里的jizd是密钥所有者的名字
Ø 导出公有密钥成为一个X.509格式的证书:
keytool –export –keystore dragon.store –alias jizd –file dragon.cer
这个命令用来产生验证签名时所要用的证书。
Ø 用私有密钥签署Jar文件:
jarsigner -keystore dragon.store MyApplet.jar jizd
这个命令用上面产生的私有密钥将我们的jar文件进行了签名。
Ø 将证书中的公有密钥导入到客户密钥库中:
keytool –import –keystore guest.store –alias jizd –file dragon.cer
Ø 用Policytool生成运行此Applet的策略文件:
应该生成一个applet.policy策略文件,策略文件中着名了验证此前名Jar的密钥库的URL和公有密钥,以及此Applet应获得的权限。
Ø 修改客户端的${java.home}/jre/lib/security目录下的java.security文件:
在其中添加一行:
policy.url.3=URL/applet.policy
URL为存放Applet.policy的服务器路径。
具体配置时,最后一步可以通过编制一个小程序自动完成,前几步完成后将所有的文件在服务器端部署。
由于系统的网络自成体系,不会和Internet相连,所以不必要购买权威机构签发的软件开发许可证,用来签署Jar文件,采用以上的自签名的Jar即可,但是需要在客户端做一简单修改工作。
2. 解决Java操纵硬件设备的限制:由于JNI编程的复杂性,所以经过从网上寻找找到了一个Twain for
Java的包,此包完成了整个Java
操纵扫描仪所需的所有JNI接口,大大减轻了编程的复杂性工作量,同时通过对它的示例程序的研究,完成了一个操纵扫描仪的简单Applet,配合上一个技
术难点的解决,已经可以从IE中操纵本地扫描仪。
3. 其他技术难点的解决,关于内嵌Swing
的Applet的IE网页代码的编写比较复杂,采用AWT控件的Applet嵌入网页时采用标签即可,但是采用Swing控
件的Applet嵌入网页时需采用标签,代码繁杂冗长,工作量比较大,解决办法是首先编写采用
标签的网页,然后采用Sun的HTMLConverter工具(可从Sun.com上免费下载)批量转化即可。
四、 采用的关键技术及实现情况。
1. 突破JDK Sandbox限制技术:
i. 修改客户端策略文件——已实现
ii. 数字签名——已实现
2.解决Java操纵扫描仪限制:采用现成的Twain for java包——已实现
此包是试用版,正式版报价2000$,有待于寻找类似的免费开发包。
3. 用Swing控件的Applet的网页的编写,采用Sun HTMLConverter——已实现
五、 技术实现的代价:
主要技术点 时间代价 成本代价
修改客户端策略文件 半天 0
数字签名的相关技术 3天 0
解决Java操纵扫描仪限制(JNI) 3天 暂时无法计算
Swing控件的Applet的网页的编写 半天 0
服务器端和客户端文件的部署 1天 0
六、 不完善或有待于解决的问题:
当前不完善或有待于解决的问题主要是Java操纵扫描仪的包是试用版,购买正式版需花费2000$,还需要寻求一些免费的或者价格低廉的开发包。
七、 技术前景
八、 参考资料:
http://www.suitable.com/Doc_CodeSigning.shtml
http://forum.java.sun.com/
http://java.sun.com/docs/books/tutorial/security1.2/toolsign/index.html
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/30292/showart_433183.html |
|