Method-Security

Method-Securityはサービスクラスのメソッドベースでアクセスを制御する際に利用する。 基本的な設定は次のようになる。

ソースコード6: applicationContext-security.xml抜粋(全サンプルのダウンロード)

<!-- Method-Securityの設定 -->
<global-method-security>
<!-- ポイントカットでメソッドと必要な権限を記述する -->
<protect-pointcut access="ROLE_ADMIN" 
expression="execution(* sample.web1.*Service.*(..))" />
</global-method-security>

各タグの説明についてはソースコードのコメントを見てほしい。 メソッドの指定にはポイントカットが利用できるので、複数メソッドを一括して宣言することが可能だ。

またMethod-Securityにはアクセス制御のための3種類のアノテーションが用意されている。新しく追加されたアノテーションではACL機能を利用したり、パラメータを渡したりすることも可能になっている。

新しいアノテーションは次のように利用する。

ソースコード7: applicationContext-security.xml抜粋(全サンプルのダウンロード)

<global-method-security pre-post-annotations="enabled">
</global-method-security>

ソースコード7: SampleService.java(全サンプルのダウンロード)

package sample.web1;
import org.springframework.security.access.prepost.PreAuthorize;

public interface SampleService {
    @PreAuthorize("hasRole('ROLE_ADMIN')")
    void getMessage();
}

Method-Securityの設定をすると自動的にAOPの設定がされ、指定したクラスが呼び出されるときに、Aspectとしてアクセス制御処理が呼び出されるようになる。