1

コンピューターで実行する特定のアプレットを指定したいjava.security.AllPermission(デバッグおよびセキュリティ テスト用)。ただし、実行するすべてのアプレットがこの権限を持つようにしたくありません。そのため、ユーザー Java ポリシー ファイル (テストを通じて正しいポリシー ファイルであることを確認済み) を編集して、次の値を入力しようとしました。

grant codeBase "http://host_where_applet_lives/-" {
 permission java.security.AllPermission;
};

この値は、アプレットが何か強力なことを行おうとすると失敗します (私の場合は、新しいスレッドを作成します)。ただし、次の値を入れると:

grant {
 permission java.security.AllPermission;
};

アプレットは強力な操作を実行できます。唯一の違いは、codeBase属性がないことです。

ここで尋ねられた同様の質問に対する回答 [1] は、AccessController.doPrivileged()呼び出しが必要になる可能性があることを示唆しているように見えました (ただし、表示も証明もされていません)。私には、すべてのアプレットにアクセス許可を付与するときにその呼び出しが必要ないため、これは間違っているように思えます (2 番目に示した例)。これが解決策であるとしても、私が実行するアプレットにAccessController.doPrivileged()呼び出しを散らかすことは簡単ではなく、必ずしも可能でもありません。それに加えて、私のテストでは、これはとにかく機能しないことが示されています。しかし、それに関するより多くのアイデアを聞くことができてうれしいです。

[1]イントラネット アプレット用に構成された AllPermission を取得できません。誰でも助けることができますか?

4

1 に答える 1

1

あなたが参照した同様の質問への回答は、 JavaScript から Java アプレット コードを呼び出すと、信頼できない JavaScript が原因でスタック インスペクションが実行され、失敗する可能性があるSecurityExceptionことを示唆しています。コードを試してみたところ、確かに、Firefox は呼び出しなしで JavaScript によって呼び出されたアプレットを実行しませんが、Safari は実行します (少なくとも Mac OSX 上では)。AccessControllerdoPrivileged()

JavaScript からアプレットを呼び出している場合は、Applet.paint()代わりにメソッドを使用してアプレットを自動的に呼び出すことができます。または、doPrivileged()メソッドを使用してスタック インスペクションを回避し、必要な特権を自分自身に付与することもできます。もちろん、信頼されていないコードは特権コードを呼び出すことができます。

于 2010-05-13T19:20:42.733 に答える