分享

Java Applet操纵本地扫描仪技术

 ctbtcol 2015-01-05
系统采用了基于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嵌入网页时采用<Applet>标签即可,但是采用Swing控 件的Applet嵌入网页时需采用<Object>标签,代码繁杂冗长,工作量比较大,解决办法是首先编写采用<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$,还需要寻求一些免费的或者价格低廉的开发包。  
  七、 技术前景  
   
   
  八、 参考资料:  
  /Doc_CodeSigning.shtml  
  /  
  /docs/books/tutorial/security1.2/toolsign/index.html   

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多