Appletデジタル署名によりJNI方式でローカルdllファイルを呼び出す
5995 ワード
テスト用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ファイルを作成する
VC 6を用いる.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の中に入れます
第3部の具体的なC++コードを実現する.
新規dllエンジニアリング->新規c++source file
//c++ code
#include"MyApplet.h"JNIEXPORT jint JNICALL Java_MyApplet_reint(JNIEnv *, jobject) { return 3; }
c++コードがこんなに簡単だと疑う必要はありませんが、jni.hとハローhのパスを正しく設定するには、コンパイラがこの2つのファイルを見つけることができます.
jni.h jdk/includeで
jni.hにはjniも含まれていますmd.h、jdk/include/win 32ディレクトリの下
以上述べた経路をC++のライブラリディレクトリに加える.ツール->オプション->ディレクトリ.
dllをコンパイルすると、必要なdllファイルが生成されます.
このdllのファイル名はjavaコードのSystemです.loadLiberary(「fff」)のこのパラメータは、大文字と小文字は関係なく、接尾辞名は不要で、自動的に認識されます.
System.loadLiberary()この方法では、デフォルトでいくつかのディレクトリを検索し、dllを正しいディレクトリの下に置くことができます.ここでは重要です.dllはsystem 32の下に置くことができます.他の自分で研究するには、必ず正しいディレクトリを置く必要があります.そうしないと見つかりません.
Appletデジタル署名
安全のためにappletが忌み嫌う権限を持つわけにはいかない.読みたいなら書きたいなら書きなさい.そうすればネット世界はめちゃくちゃになる.Appletのデフォルトのセキュリティメカニズムはクライアントに対するいかなる操作を阻止する(阻止しなければならない).より多くの権限を持つにはappletのjarパッケージに署名する必要があります.
Javaが提供するツールで次の操作を行います(jdkのbinディレクトリの下で、私のはC:Program FilesJavajdk 1.6.0_24binです).以下の赤い代表は自分の具体的なファイル名に変えて、以下の3歩を経て
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コード