自前のセキュリティマネージャを用意する |
自分のセキュリティマネージャで制約を課したい操作の種類によっては、 SecurityManager の checkXXX() メソッドのいくつかを上書 きする必要が生じる。
次に示すテーブルの最初の列は、ユーザが実行できるさまざまな操作の対象である。2 番目の列は、最初の列の操作に許可を与える SecurityManager のメソッドである。
操作の対象 許可するメソッド ソケット checkAccept(String host, int port) checkConnect(String host, int port) checkConnect(String host, int port, Object executionContext) checkListen(int port) スレッド checkAccess(Thread thread) checkAccess(ThreadGroup threadgroup) クラスローダ checkCreateClassLoader() ファイルシステム checkDelete(String filename) checkLink(String library) checkRead(FileDescriptor filedescriptor) checkRead(String filename) checkRead(String filename, Object executionContext) checkWrite(FileDescriptor filedescriptor) checkWrite(String filename) システムコマンド checkExec(String command) インタプリタ checkExit(int status) パッケージ checkPackageAccess(String packageName) checkPackageDefinition(String packageName) 設定項目 checkPropertiesAccess() checkPropertyAccess(String key) checkPropertyAccess(String key, String def) ネットワーキング checkSetFactory() ウィンドウ checkTopLevelWindow(Object window)自分のセキュリティ方針に応じて、これらのメソッドの全部または一部を上書きする ことができる。たとえば、Web ブラウザまたは Applet ビューワを書く場合で、アプ レットがソケットをまったく利用できないようにしたいときは、ソケットのアクセス に関わる 4 つのメソッドを上書きする。
checkXXX() メソッドの多くは、さまざまな状況で呼び出さ れる。セキュリティマネージャを書くで PasswordSecurityManager を書くときに見てきたように、 checkAccess(ThreadGroup g) メソッドは、 ユーザが ThreadGroup を作成し、そのデーモンの状態を設定し、それを停止すると きなどに起動される。 checkXXX() メソッドを上書きするときは、それが呼び出さ れる可能性のあるすべての状況を理解しておく必要がある。
すべての checkXXX() メソッドに対して SecurityManager クラスが提供するデフォルトの実装は以下のとおりである。
public void checkXXX(. . .) { throw new SecurityException(); }ユーザが実装しようとするセキュリティ方針は、すべてを拒絶するというより、状況 に応じて細かく対応が異なる場合が多い。したがって、SecurityManager のすべての checkXXX() メソッドを上書きしなければならない場合が多 いと思われる。
自前のセキュリティマネージャを用意する |