由于项目需要,要求实现在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小程序如果没有经过签名,那么访问客户端程序下载后会受到安全限制。
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>