私は小さな Java アプレットを持っていますが、厄介な問題があります。jarsigner ツールを使用して、独自のキーストアで JARに署名しました (次の手順に従います)。
Java アプレットは署名付きJAR をダウンロードし、 URLClassLoaderの拡張クラスを使用して起動しようとします。この JAR は、次のコード行を実行しようとします。
ClassLoader.getSystemClassLoader().getResource("aResource");
次の方法で終了した大きなスタック トレースで失敗します。
Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getClassLoader")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366)
at java.security.AccessController.checkPermission(AccessController.java:555)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:1476)
at test.SecondJAR.main(SecondJAR.java:8)
(test.SecondJARの8行目がgetResource(...)
メソッドに対応
Java アプレットが起動されると、発行元を信頼している場合、ユーザーは証明書を受け入れるように求められます。
受け入れても例外が発生しました。証明書をインストールし、プロンプト メッセージが自動的に受け入れられても、例外が発生しました。
私もこれを試しました:
AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
ClassLoader.getSystemClassLoader().getResource("aResource");
return null;
}
});
そして、同じ例外で失敗します。
どんな助けでも大歓迎です!