以下で、ユーザー情報と作業ディレクトリを表示するアプレットを示します。
通常のアプレット(署名なし)では、
このような実行をセキュリティ的に許していません。
クライアント側のユーザー情報取得や、ハードディスクをアクセスする実行を制限しています。
実行すると次のエラーになります。
例外: java.security.AccessControlException: access denied (java.util.PropertyPermission user.name read)
Ignored exception: java.security.AccessControlException: access denied (java.util.PropertyPermission user.name read)
また、
アプレットからそのサーバ以外と通信するネットワークプログラムも許可されていません。
ですがキーペアに対して正当な認証局の署名を受けると、このプログラムは
実行可能になります。
(上記アプレットは署名をしていますが、それは自身で署名したもので
正当な認証局の署名ではありません。)
このような作品を作る場合、テストでは本来の署名が得られませんが
ブラウザにでkeytool作成した証明書を登録することで、テスト実行できます。
→証明書インポートを参照
また、次の警告ダイアログの出現に対して、許可することで実行できるでしょう。
このアプレット用のHTMLソース部分を以下に示します。
<html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <applet CODEBASE="./" archive="userinfo.jar" code="UserInfo.class" name="ap" Width="500" Height="200" > </applet> </body> </html>
また、上記アプレットのJavaソースコードを示します。
import java.applet.*; import java.awt.*;//各種部品 import java.io.*;//ファイル操作 public class UserInfo extends Applet { TextField txt = new TextField (20); TextArea txt2 = new TextArea(); public void init(){//アプレットがロードされた時に呼ばれる。 this.setLayout(new BorderLayout() ); add(txt, BorderLayout.NORTH); add(txt2, BorderLayout.CENTER); //ユーザーアカウント名取得 String userID = System.getProperty("user.name"); System.out.println("user.name:" + userID); txt.setText(userID); //ユーザー作業ディレクトリ内サーチ String userPath = System.getProperty("user.dir"); System.out.println("user.dir:" + userPath); File dir = new File(userPath);//ユーザー作業ディレクトリ取得 File []files = dir.listFiles();//その中のファイル群取得 txt2.setText("");//クリア for(int i=0; i < files.length; i++){//テキストエリアへ追加の繰り返し txt2.append(files[i].getAbsolutePath() + "\n"); } } }
上記をコンパイルして、jarファイル(userinfo_tmp.jar)を作成する操作を示します。 上記操作をD:\workに作成し、そこで行うコマンドライン操作です。
D:\work>javac UserInfo.java D:\work>jar cfmv userinfo_tmp.jar manifest.txt UserInfo.class マニフェストが追加されました。 UserInfo.class を追加中です。(入 = 860) (出 = 508)(40% 収縮されました) D:\work>
なお、上記のjarコマンドを使う前に、次のマニフェストファイル manifest.txtを、D:\workに作成しておく必要があります。
Main-Class: UserInfo Class-Path: userinfo.jar .
証明用に、D:workにkeytoolで作成したキーストアファイル(.keystore)
を用意します。
最後に、次の操作で署名します。
D:\work>jarsigner -keystore .keystore -storepass abc123 -signedjar userinfo.jar userinfo_tmp.jar xyz 警告: 署名者の証明書は 6 か月以内に期限切れになります。 D:\work>
以上で署名したuserinfo.jarが出来上がります。
上記で作成したアプレットの証明書は、
keytoolで作成したキーストアファイル(.keystore)
の中にありますが、それを
エクスポートしたuserinfo.cerのファイルを
直接ブラウザにインポートすることで実行できます。
インターネットブラウザの場合の手順を以下に示します。
インターネットエクスプローラの
ツール→『オプション』を選択し、
「コンテンツ」タブを選びます。
インポートボタンで
ウイザードに従い、
userinfo.cerのファイルを指定します。