Policy
次のように Policy クラスを拡張する独自のクラスを定義して、カスタムを設定したいと考えています。
public class MyPolicy extends Policy {
public MyPolicy() {
super();
}
@Override
public PermissionCollection getPermissions(ProtectionDomain domain) {
// return PermissionCollection with no permissions
PermissionCollection pc = new PermissionCollection();
return pm;
}
}
次に、アプリケーションの開始時にカスタムPolicy
クラスを設定SecurityManager
し、新しいポリシーが有効になるように有効にします。
Policy.setPolicy(new MyPolicy());
System.setSecurityManager(new SecurityManager());
上記の問題は、それが機能しないことです。上記の例の考え方は、アプリケーションがあらゆる種類の許可を必要とすることを実行できないようにするポリシーを導入することです。たとえば、アプリケーションを実行すると、次のようになります。
System.getenv();
上記の結果、AccessControlException
によってスローされるはずSecurityManager
です。代わりに、私のアプリケーションは問題なく動作します。ただし、ポリシーを初期化すると、SecurityManager
次のようになります。
// setting the policy twice intentionally
Policy.setPolicy(new MyPolicy());
Policy.setPolicy(new MyPolicy());
System.setSecurityManager(new SecurityManager());
次にSystem.getenv()
、実際に実行すると、期待される結果が得られAccessControlException
ます。
説明が必要な質問/懸念事項は次のとおりです。
- SecurityManager の設定後にポリシーを有効にするために、ポリシーを 2 回設定する必要があるのはなぜですか?
- 上記の問題は何らかのバグですか、それとも Policy クラスは意図的にこのように動作するように設計されていますか (もしそうなら、なぜですか?)。