`
wenzongliang
  • 浏览: 462785 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

applet通过数字签名用JNI方式调用本地dll文件

 
阅读更多

 

写测试用的applet

第一步,首先弄明白applet怎么实现,里面要导入dll文件System.loadLibrary("fff")和声明用到的本地方法,这个文件会在下一步介绍如何生成

//Java代码

 

import java.applet.Applet;
import java.awt.Graphics;

public class MyApplet extends Applet {

	static {
		System.loadLibrary("fff");
	}
	
	public  native int reint();
	
	@Override
	public void paint(Graphics g) {
		int a=reint();
		g.drawString(String.valueOf(a), 5, 35);
	}

}

 

 

建立applet要用的dll文件

 

用VC6.0动态连接库工程起名为fff,这里要用到JNI技术了

先把MyApplet生成 .class文件javac MyApplet.java

然后要.class文件生成C引用的头文件javah MyApplet.class

 

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class MyApplet */

#ifndef _Included_MyApplet
#define _Included_MyApplet
#ifdef __cplusplus
extern "C" {
#endif
#undef MyApplet_FOCUS_TRAVERSABLE_UNKNOWN
#define MyApplet_FOCUS_TRAVERSABLE_UNKNOWN 0L
#undef MyApplet_FOCUS_TRAVERSABLE_DEFAULT
#define MyApplet_FOCUS_TRAVERSABLE_DEFAULT 1L
#undef MyApplet_FOCUS_TRAVERSABLE_SET
#define MyApplet_FOCUS_TRAVERSABLE_SET 2L
#undef MyApplet_TOP_ALIGNMENT
#define MyApplet_TOP_ALIGNMENT 0.0f
#undef MyApplet_CENTER_ALIGNMENT
#define MyApplet_CENTER_ALIGNMENT 0.5f
#undef MyApplet_BOTTOM_ALIGNMENT
#define MyApplet_BOTTOM_ALIGNMENT 1.0f
#undef MyApplet_LEFT_ALIGNMENT
#define MyApplet_LEFT_ALIGNMENT 0.0f
#undef MyApplet_RIGHT_ALIGNMENT
#define MyApplet_RIGHT_ALIGNMENT 1.0f
#undef MyApplet_serialVersionUID
#define MyApplet_serialVersionUID -7644114512714619750i64
#undef MyApplet_serialVersionUID
#define MyApplet_serialVersionUID 4613797578919906343i64
#undef MyApplet_INCLUDE_SELF
#define MyApplet_INCLUDE_SELF 1L
#undef MyApplet_SEARCH_HEAVYWEIGHTS
#define MyApplet_SEARCH_HEAVYWEIGHTS 1L
#undef MyApplet_serialVersionUID
#define MyApplet_serialVersionUID -2728009084054400034i64
#undef MyApplet_serialVersionUID
#define MyApplet_serialVersionUID -5836846270535785031i64
/*
 * Class:     MyApplet
 * Method:    reint
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_MyApplet_reint
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

 

 

这里我们只关心那个方法,把方法copy到下面的c++source file里面

 

第三部具体的C++代码实现.

新建dll工程->新建c++ source file

//c++ code

#include"MyApplet.h" JNIEXPORT jint JNICALL Java_MyApplet_reint(JNIEnv *, jobject) { return 3; }

不用怀疑c++代码就这么简单,但是jni.h和Hello.h的路径要设置正确,编译器才能找到这两个文件

jni.h在jdk/include下

jni.h里面还会包含一个jni_md.h,在jdk/include/win32目录下

把以上提到的路径加到C++的库目录下.工具->选项->目录.

然后编译dll,就会生成我们需要的dll文件.

这个dll的文件名,就是我们在java代码中System.loadLiberary("fff")里面的这个参数,大小写无所谓,后缀名不需要,会自动识别。

System.loadLiberary()这个方法会默认搜索几个目录,把dll放在正确的目录下,这里比较重要,dll可以放在system32下,其他的自己研究,一定要放对不然会找不到的

 

applet数字签名

为了安全,applet不可能具有肆无忌惮的权限,想读就读,想写就写,那样网络世界就乱套了。applet默认的安全机制是阻止对客户端的任何操作的(必须阻止).想要有更多权限必须通过对applet的jar包签名.

用java提供的工具进行如下操作(工具在jdk的bin目录下,我的是在C:\Program Files\Java\jdk1.6.0_24\bin)。以下红色代表改变成自己的具体文件名,经过以下三步即可

 

jar -cvf MyApplet.jar MyApplet.class

keytool -genkey -keystore MyApplet.keystore -alias Mission

jarsigner -keystore MyApplet.keystore MyApplet.jar Mission

 

首先:用jdk/bin目录下的jar把类生成jar包jar -cvf MyApplet.jar MyApplet.class

 

然后:用jdk/bin目录下的keytool生成密钥库文件keytool -genkey -keystore MyApplet.keystore -alias Mission这里的Mission是随便写的,在下一步给jar文件签名要用到。这样会提示你输入一些信息,这些信息可以随便写,最后确认即可.

最后:用jdk/bin下的jarsigner和上一步生成的密钥库文件给jar文件签名 jarsigner -keystore MyApplet.keystore MyApplet.jar Mission会提示你输入密码。这样就完成了签名。

不必要的发布证书与客户端导入证书

keytool   -export   -keystore   MyApplet.keystore   -alias Mission -file MyApplet.cer 

 

keytool -import -alias Mission -file MyApplet.cer -keystore password

最后要用的HTML文件

 

//HTML代码

 

<html>
<body>
<applet archive="MyApplet.jar" code="MyApplet.class" width="500" height="500"/>
</body>
</html>

我的话费充值店-各种面额

电信100元仅售98.60 
联通100仅售99.00
移动100仅售99.30

分享到:
评论
1 楼 cailinj 2013-01-23  
为什么我按照顺序做的,却报错啊,报错内容:

java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.MWRFJavaAPI)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkLink(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at OneApplet.init(OneApplet.java:227)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
异常:java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.MWRFJavaAPI)

相关推荐

    jni_java_dll_jsp.zip_Java调用dll_applet_java Applet_java dll jsp_j

    总结,"jni_java_dll_jsp.zip"包含的资源提供了关于如何在Java中使用JNI调用DLL,特别是在Applet环境下如何安全地访问本地资源的解决方案。这对于需要结合Java Web应用和本地系统功能的开发者来说,是一份非常有价值...

    java 调用dll

    ### Java调用DLL:利用JNI调用C/C++编写的原生函数 #### 一、引言 在本文档中,我们将深入探讨如何通过Java Native Interface (JNI) 来调用那些由C或C++语言编写的原生函数。这种方法为Java程序提供了与外部系统...

    Applet读取客户端串口数据实例

    Java通过JNI(Java Native Interface)调用这个DLL来实现对串口的访问。 2. **`comm.jar`** - 包含了用于操作串口的Java类库。 3. **`javax.comm.properties`** - 这个文件包含了串口驱动的配置信息。但在我们的实现...

    java怎么调用C语言

    ### Java如何通过JNI调用C语言 #### 一、引言 Java作为一种广泛使用的编程语言,因其具有良好的跨平台特性而备受青睐。然而,这种跨平台能力也导致Java与底层系统的交互较为有限,从而限制了某些功能的实现。为了...

    applet 嵌入mplayer 播放视频

    2. 使用Java的JNI(Java Native Interface)技术,创建Java类来调用MPlayer的C/C++接口。 3. 编写Java代码来初始化MPlayer,加载视频文件,并控制播放、暂停、停止等操作。 4. 创建一个HTML页面,将Java Applet标签...

    win32comm.dll,comm.jar,javax.comm. properties

    "win32comm.dll"通过JNI(Java Native Interface)技术,使得Java代码可以调用C或C++编写的本地代码,从而实现对Windows串口的直接操作。 其次,"comm.jar"是Java串口通信的库文件,它包含了“javax.comm”包,这个包...

    ic卡中javaRD800问题

    此外,可能还需要编写或使用Java Native Interface (JNI) 或Java Native Access (JNA) 类来调用这些本地库。 从部分内容来看,解决问题的步骤还包括: 1. **下载库文件**:获取`javaRD800.dll`和`dcrf32.dll`,并...

    java访问硬件的例子 天敏V4000板卡,海康网络录像机,明华IC卡,KPCI847板子

    开发者需要编写C/C++的动态链接库(DLL),该库与硬件通信,然后在Java中通过JNI调用这些库函数,实现对天敏V4000板卡的视频数据获取和处理。 其次,海康威视的硬盘录像机是安防监控系统中的核心设备。Java可以通过...

    javaw.exe动态链接库

    开发者可以通过JNI编写C/C++代码,编译成DLL文件,然后在Java代码中调用这些函数,实现Java与本地系统的紧密集成。 `javaw.exe`动态链接库的管理涉及以下几个方面: 1. **Java环境配置**:确保系统中已安装正确...

    OCX方式条码生成

    "mscomm.rar"可能是包含了MSComm控件的压缩文件,解压后可能包含必要的dll和头文件,用于在项目中引用和使用。 7. **安全与兼容性**:由于OCX控件基于ActiveX技术,可能存在安全风险,且仅适用于支持ActiveX的...

    java开源包1

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包8

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包11

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包2

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包3

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包6

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包5

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

    java开源包10

    GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的...

Global site tag (gtag.js) - Google Analytics