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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值