
首先将依赖的DLL放在JRE bin目录中(注意: 当浏览器在applet中同时具有JDK和JRE时,默认值为系统中的JRE,将仅找到JRE bin目录DLL)<
使用JNA编写DLL库的接口
package com.test;
import com.sun.jna.Native;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.win32.StdCallLibrary;
public interface MyLib extends StdCallLibrary{
MyLib Instance = (MyLib)Native.loadLibrary("NJRwCard", MyLib.class);
public int comset(ByteByReference baudrate);
}
为什么要编写Applet?
package com.test;
import javax.swing.JApplet;
import javax.swing.JLabel;
import com.sun.jna.Memory;
import com.sun.jna.ptr.ByteByReference;
@SuppressWarnings("serial")
public class MyApplet extends JApplet {
int temp;
Memory memory;
static int count = 0;
@Override
public void init() {
ByteByReference baudrate = new ByteByReference();
memory = new Memory(20);
memory.setString(0, "abc");
baudrate.setPointer(memory);
temp = MyLib.Instance.comset(baudrate);
String info = new String();
switch (temp) {
case -1:
info = "配置串口失败!";
break;
default:
info = "自动配置串口成功!";
break;
}
getContentPane().add(new JLabel(info));
}
}
现在,您可以在IDE中以As Applet的身份运行,但是它可能会失败. 因为您使用的是配置的JDK,所以可能找不到资源. 您还必须将DLL放入JDK bin目录中.
运行完之后,使用IDE将Applet打包到Jar包中,或在命令行上执行以下语句:
jar
-cvf MyApplet.jar类
您可以编写Applet.jsp页面
<applet codebase="<%=basePath%>applets"
code="com.epro.iccard.IcCardApplet"
name="IcCardApplet"
width="320"
archive="iccard.jar,jna.jar;"
height="24">
</applet>
由于要调用客户端的本地资源,因此未经许可的系统将报告访问被拒绝的错误,因此采用以下方法获得授权.

生成证书和签名
1,键盘工具
-genkey -keystore pepper.store -alias pepper
此命令用于生成密钥库. 执行后applet数字签名,应在c: / admin中生成pepper.store文件. 在这里,胡椒粉是我的名字. 您可以修改它. 另外,执行命令时,系统会提示您输入密钥库的密码. 您必须在这里记住它,否则以后要使用它时将无法输入.
2,键盘工具
-export -keystore pepper.store -alias pepper -file pepper.cert
此命令用于生成用于签名的证书. 同样,这里的辣椒也可以替换为您需要的名称. 执行此命令后,将在c: / admin中生成pepper.cert文件.
3
jarsigner -keystore pepper.store MyApplet.jar pepper
此命令使用上面生成的证书对我们的jar文件进行签名.
尽管已签名,但由于客户端此时将不主动信任我们的签名,因此需要一些工作来获取客户端DLL的读取和写入权限. 有三种方法(建议使用第三种方法):
方法一,创建一个新的策略文件

创建一个新的策略文件,并添加这些策略文件(修改文件)
1. 在c: / admin中生成一个名为applet.policy的文件,其内容如下:
keystore "file:pepper.store","JKS";
grant signedBy "pepper" {
permission java.io.FilePermission "<< ALL FILES >>","read";
};
此文件允许Pepper签名的Applet拥有对所有本地文件的读取权限.
2. 在$ {java.home} / jre / lib / security目录中修改java.securityapplet数字签名,并找到以下两行:
policy.url.1 =文件: $ {java.home} /lib/security/java.policy
policy.url.2 =文件: $ {user.home} /. java.policy
在下面添加第三行
policy.url.3 =文件: c:
/admin/applet.policy
我们先前创建的applet.policy文件仅在完成此修改后才有效.
在WebRoot下添加Applets目录,并将签名的applet.jar,jna.jar放在此路径下

启动Tomcat
好的,现在该applet可以运行读取和写入文件的功能. 如果要考虑在Internet上实现此applet,则无需在所有客户端上执行上述步骤,只需在服务器上创建目录,例如c: / admin,然后将此目录映射到. 这是一个假设的URL,将Pepper.cert,pepper.store,FileReaderApplet.html,MyApplet.jar和applet.policy放在此目录中,然后按如下所示修改applet.policy文件:
密钥库
“ http: //”,
“ JKS”;授予
signedBy“ pepper” {权限java.io.FilePermission“ <<所有文件>>”,“读取”;};
3. 每个客户端只需修改其$ {java.home} / jre / lib / security目录中的java.security文件,如下所示:
policy.url.1 =文件: $ {java.home} /lib/security/java.policypolicy.url.2 =
文件: $ {user.home} /. java.policypolicy.url.3 =
www.testApplet.com/admin/applet.policy
当然,每个客户端仍然需要安装JRE.
方法二,修改Java默认安全策略文件(不是很安全)

打开$ {java.home} /lib/security/java.policy文件并添加授权
如果报告的异常是:
java.security.AccessControlException: 访问被拒绝(读取了java.util.PropertyPermission jna.encoding)
在授予后在括号中的jna.encoding中添加一行
阅读授权
权限java.util.PropertyPermission“ jna.encoding”,“读取”;
方法三,使用AccessController.doPrivileged提升代码权限(推荐,无需修改客户端配置):
如果您不希望客户端修改JRE中的安全配置,则可以选择在代码中对其进行升级,请参考它.
请注意,使用此方法: 执行需要权限的代码需要特殊的方法才能执行
如果您信任此签名,
AccessController.doPrivileged(...)将执行此代码
在此示例中,您可以封装comset方法:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-159759-1.html
太牛叉了