wicket-auth-rolesのまとめ - その2

前回の続きです。

 今回は各ページに対する認証(権限)の一括設定に関してです。

 wicket-auth-rolesを使った場合はページクラスに対して@AuthorizeInstantiationを使用すれば簡単に認証制御が可能なのですが

「全てのPageクラスに対してアノテーション付けるの('A`)マンドクセ

という人も多いかと思います。そういう場合は下記のような方法を検討するとよいかなと思います。

  • 親クラスで権限を設定する
  • パッケージレベルで権限を設定する

以下はそれぞれの設定方法です。

親クラスで権限を設定する方法

 例えばADMIN権限を指定した親クラスを作成し、ADMIN権限を持っていないと表示不可であるページはそのクラスを継承するようにします。

親ページクラス

@AuthorizeInstantiation(Roles.ADMIN)
public abstract class AuthorizationPage extends WebPage {
}

ADMIN権限のみ表示可能なページ

public class AdminPage1 extends AuthorizationPage {
}
public class AdminPage2 extends AuthorizationPage {
}

 AuthorizationPageをマーカーインターフェースのような役割として使用する感じです。ちなみにAuthorizeInstantiationアノテーションには@Inheritedが指定されているのでAuthorizationPageを継承したクラスはAuthorizeInstantiationの情報も継承されることになります。

パッケージレベルで権限を設定する方法

 javaのpackage-info.javaを利用することでパッケージ単位で権限の設定が可能になります。例えばcom.mycompany.adminというパッケージ直下に下記のようなファイルを作成します。
(NetBeansの場合は普通にjavaファイルとして作成しようとすると「クラス名が有効ではありません」と怒られるので作成したパッケージにて右クリック→「新規」→「その他」→「Java」→「Javaパッケージ情報」にて作成しましょう)

package-info.java
@AuthorizeInstantiation(Roles.ADMIN)
package com.mycompany.admin;

import org.apache.wicket.authorization.strategies.role.annotations.AuthorizeInstantiation;
import org.apache.wicket.authorization.strategies.role.Roles;

 このようにpackage-info.javaを作成しておけばcom.mycompany.adminパッケージ以下の全てのPageクラスはADMIN権限を持つユーザーのみが表示可能になります。


 という感じです。「もっとこうした方がいいよ」とか間違ってる点等あったら指摘してもらえると嬉しいです。