0

次のポリシー ファイルを作成しました。

grant {
    permission StackPermission "use,save";
};

アクセスするために、次のパラメーターを使用して JVM を実行します。

-Djava.security.manager -Djava.security.policy=my.policy

私のコードは次のようになります。

SecurityManager sec = System.getSecurityManager();
sec.checkPermission( new StackPermission( "use,save" ) );

すべてがうまく機能しますが、「保存」アクションをチェックせずに、もう少し細かくしたいと思います。

sec.checkPermission( new StackPermission( "use" ) );

ポリシーで「使用」と「保存」の両方を指定しているにもかかわらず、これが機能しないようです。そのような機能を提供するにはどうすればよいですか?

どうもありがとう、ヴラド

4

1 に答える 1

0

name一般に、パーミッション コンストラクターには、引数なし、 、およびの 3 つの種類がnameありactionsます。私はあなたのソースコードを持っていませんStackPermissions(ところで、デフォルト以外のパッケージに入れることをお勧めします) . Java では、アリティでもコンストラクターをオーバーロードできるのはちょっと残念です。nameaction

そのため、クラスを名前付きパッケージに入れ、クラスとポリシー ファイルの両方で のname前にを追加します。action

(一般に、「Java 2 セキュリティ モデル」からできるだけ早く離れることをお勧めします。代わりに、それ以上のセキュリティ チェックなしで特権アクションを実行する機能 (専門用語でのオブジェクト機能) を持つオブジェクトを返す 1 つのチェック済みメソッドを用意します。 . コードの上位層でも同じことを行います。)

于 2013-03-28T13:25:53.343 に答える