0

デフォルトの Java セキュリティ ポリシーは、禁止したいことを許可するため、使用していません。したがって、通常、どこからでも読み取ることを許可しない独自のポリシー ファイルがあります...

しかし、これは、必要なときに rt.jar 自体がファイルから読み取ることができないことを意味します。これは悪いことです。

そこで、次のルールを追加しました。

grant codeBase "file:${java.home}/lib/rt.jar" {
  permission java.security.AllPermission;
};
grant codeBase "file:${java.home}/jre/lib/rt.jar" {
  permission java.security.AllPermission;
};

java.home が JDK と JRE のどちらになるかわからなかったので、両方を設定しました。しかし、テストを実行すると、rt.jar がファイルから読み取ろうとすると、依然としてセキュリティ例外が発生します。

明らかに私は何か間違ったことをしているので、他の誰かが私のタイプミスを見つけてくれることを願っています.

私が試してみました:

  • /後に追加file:
  • jar:前後file:に追加!/-_.jar
4

1 に答える 1

0

システム クラスからアクセス許可を削除できるとは思わない (null ClassLoaderそしてnull ProtectionDomain、そうではありませんCodeSource)。

あなたは Java 2 セキュリティ モデルを誤解していると思います (誰も本当に理解していないので簡単に理解できます)。セキュリティ チェックは、(大まかに言えば) スタック内のすべてのフレームをチェックすることによって行われます (いくつかの select メソッドを除く)。テストされる各フレームには許可が必要です。許可のないスタックのどこかにフレームが 1 つだけある場合、チェックは失敗します。

(SecurityManagerに相談する前に常に特定の権限を拒否するが存在する可能性がありAccessControllerます。)

于 2013-03-06T02:09:53.020 に答える