在b/s架构下实现与读卡器(射频读写机)通讯

由于项目需要,要求实现在B/S下,与非接触卡读写机进行通讯。由于在B/S架构下程序一般放在服务器端,那么怎样来实现对客户端的硬件(读卡器)操作呢?我的解决思路是使用japplet本地dll文件(这个文件一般硬件开发商会提供)。要想用java调用dll必须使用JNI来调用。

public class JavaRD
{
	public JavaRD()
	{
	}
	static
	{
		System.loadLibrary("RD");
	}
	public native int dc_init(int lPort,int lBaud);
	public native short dc_exit(int lDevice);
	//................
}

 
写好JNI后,调试硬件通过后就可以使用japplet去调用。但是问题又来了,用Applet写的java小程序如果没有经过签名,那么访问客户端程序下载后会受到安全限制。

通常的浏览器运行Applet程序的安全策略如下:
(1)Applet不能启动任何本地的可执行文件。
(2)Applet只能与它们最初驻留的服务器通信,而不能与其它位于“网络”上客户机本地网络上的服务器通信。
(3)Applet不能读写本地文件系统。
(4)Applet只能获取本地计算机的部分非敏感性信息,如操作系统名称和版本号、文件及路径分隔符、换行符等。
(5)Applet运行时弹出的窗口都会带有一些警告消息。
(6)此外,Applet还可通过数字签名(标明其作者和来源地)进行不同的安全授权。
Applet读写本地文件:
(1) 你可以采用签名的办法解决。
(2) 你可以修改客户端 jre 的安全设计来解决。
这里一般选取第一张方案,对applet的jar包进行数字签名。
数字签名作为一种电子身份的认证的手段,被普遍用于网上银行,安全网络通信等领域.数字证书可向专门的CA机构申请,有免费的数字证书和付费的数字证书。付费的太贵玩不起,免费的可以在网上申请,也可以通过jdk中的keytool工具进行生成没有经过认证的数字证书。具体方法如下:
(1)将java小程序打包
jar cvf test.jar d3.class 也可以通过fat jar等工具生成。
(2)生成名为chinani.store的密钥库,别名为d3
  keytool -genkey -keystore d3.store -alias d3
 

D:\>keytool -genkey -keystore d3.store -alias d3
输入keystore密码:  123456
您的名字与姓氏是什么?
  [Unknown]:  yx
您的组织单位名称是什么?
  [Unknown]:  成都XX公司
您的组织名称是什么?
  [Unknown]:  XX
您所在的城市或区域名称是什么?
  [Unknown]:  成都
您所在的州或省份名称是什么?
  [Unknown]:  四川
该单位的两字母国家代码是什么
  [Unknown]:  cn
CN=yx, OU=成都XX公司, O=XX, L=成都, ST=四川, C=cn 正确吗?
  [否]:  y

输入<d3>的主密码
        (如果和 keystore 密码相同,按回车):

完毕后会生成一个d3.store文件,该文件中保存有别名为d3的数字证书.输入以下命令即可查看此数字证书:

(3)导出d3.cer数字证书
   keytool -export -keystore d3.store -alias d3 -file d3.cer

 

D:\>   keytool -export -keystore d3.store -alias d3 -file d3.cer
输入keystore密码:  123456
保存在文件中的认证 <d3.cer>

(4)对d3.jar文件进行签名
jarsigner -keystore d3.store  D3.jar d3

 

D:\>jarsigner -keystore d3.store  D3.jar d3
输入密钥库的口令短语: 123456

警告: 签名者证书将在六个月内过期。

好现在就生成了一个带数字签名的jar包。

 

最好写jsp加载applet

 

<%@ page language="java"  pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>

	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <TABLE BORDER=5 ALIGN="CENTER"> 
  <TR><TH CLASS="TITLE"> 读卡程序DEMO 
</TABLE> 
<P> 
<CENTER> 
<jsp:plugin type="applet" code="com.yunda.ui.CardUI" archive="D3.jar"  width="500" height="420"> 
</jsp:plugin> 
<br> 
</CENTER>
  </body>
</html>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值