Previous | Next | Trail Map | Custom Networking and Security | 自前のセキュリティマネージャを用意する


セキュリティマネージャの紹介

個々の Java アプリケーションは、常時セキュリティガードとして機能する、独自の セキュリティマネージャオブジェクトをもつことができる。java.lang パッケージの SecurityManager クラスは、すべての Java セキュリティマネージャのためにプログラミングインタフェースと部分的な実装を提供する抽象クラスである。

デフォルトではアプリケーションはセキュリティマネージャをもたない。つまり、 Java ランタイムシステムは、Java アプリケーションごとに自動的にセキュリティマ ネージャを作成するのではない。このため、デフォルトではアプリケーションは、セ キュリティ上の制限が必要な操作をすべて許している。

デフォルトのこの寛大な振る舞いを変えるには、アプリケーションは自前のセキ ュリティマネージャを作成し、インストールしなければならない。セキュリティマネ ージャの作成方法は セキュリティマネージャを書くで、またそのイン ストール方法は セキュリティマネージャをインストールするで学 習する。


注: 既存のブラウザと Applet ビューワは、始動時に自前のセキュリティマネージ ャを作成する。 したがってアプレットは、アプレットが動作して いる特定のアプリケーションに対してセキュリティマネージャが課すあらゆる アクセス制約に支配される。

System クラスの getSecurityManager() メソッドを使用すると、アプ リケーションの現在のセキュリティマネージャを得ることができる。

SecurityManager appsm = System.getSecurityManager();

そのアプリケーションに現在セキュリティマネージャがない場合は、 getSecurityManager() は null を返すことに注意する。このため、メ ソッドのどれかを呼び出す前に、正しいオブジェクトをもっていることを確認する必 要がある。

セキュリティマネージャを得た後は、特定の操作を許可または拒絶するためのアクセ ス権を要求することができる。実際 Java パッケージのクラスの多くはまさにこれを 行っている。たとえば、Java インタープリタを終了させる System.exit() メソッドは checkExit() メソッドを使 用して出口操作を承認する。

SecurityManager security = System.getSecurityManager();
if (security != null) {
    security.checkExit(status);
}
. . .
// checkedExit() が戻ってくるとコードはここに進む

セキュリティマネージャが exit 操作を許可するなら、 checkExit() は普通に戻ってくる。 セキュリティマネージャがこの操作を拒絶する場合は、checkExit() メソッドは SecurityException をあげる。 このようにセキュリティマネージャは、リスクを伴う操作が完了する前に、その操作 を許可または拒絶するのである。

SecurityManager クラスは、他の種類の操作を検査するためのメソッドを数多く定義 している。 たとえば、SecurityManager の checkAccess() メソッドはスレッドのアクセスを確認し、checkPropertyAccess() は 指定されたプロパティへのアクセスを確認する。それぞれの操作または操作群は、そ れ自身の checkXXX() メソッドをもつ。

また、checkXXX() メソッドのセットは、すでにセキュリテ ィマネージャの保護のもとにある Java パッケージのクラスと Java ランタイムクラスの中の操作のセットを意味する。したがって一般には、ユーザコードから SecurityManager の checkXXX() メソッドを起動する必要はない。Java パッケージのクラ スと Java ランタイムクラスはすでに、checkXXX() メソッドによって表され るすべての操作がすでに保護されている程度の低いレベルでの保護をユーザに対して行っている。ただし、自前のセキュリティマネージャを書く場合は、特定の操作に対 するセキュリティ方針を厳しくしたり変更したりするために SecurityManager の checkXXX() メソッドを上書きしたり、セキュリティマネー ジャの監督下に他の種類の操作を入れ込むために自前のコードを若干追加する必要が ある場合がある。SecurityManager クラスのそれぞれの checkXXX() メソッドがどの操作または操作群を保護するよう設計されているかについては、上書きする SecurityManager のメソッドを決定するで解説す る。


Previous | Next | Trail Map | Custom Networking and Security | 自前のセキュリティマネージャを用意する