Wicket 認証ページ作成のつづき、3回目
ログイン後の各画面、WebPage 継承クラスの宣言にアノテーション、
@AuthorizeInstantiation でロール名を指定して、記述したロールだけが
アクセス可能となり表示する。
ログインできてもロール名が一致しない場合は、AuthenticatedWebApplication 継承して
作成したクラスで、オーバーライドで記述する onUnauthorizedPage が実行される。
そこで、RestartResponseAtInterceptPageException でエラーページクラスを指定して
スローしていれば、指定したエラーページに遷移する
---------------- AuthenticatedWebApplication -----------------
@Override
public void onUnauthorizedPage(Page page){
throw new RestartResponseAtInterceptPageException(ErrorPage.class);
}
---------------------------------------------------------------
ログイン後の画面Pageクラス
import org.apache.wicket.authorization.strategies.role.Roles;
import org.apache.wicket.authorization.strategies.role.annotations.AuthorizeInstantiation;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@AuthorizeInstantiation({Roles.ADMIN,Roles.USER,RolesX.GUEST})
public class IndexPage extends BaseWebPage{
public IndexPage(){
//
}
}
ロール名は、Wicket で標準で既に2つ存在する。
org.apache.wicket.authorization.strategies.role.Roles クラスで
final static String で宣言されており文字通りの意味で解釈して良いだろう
Roles.ADMIN
Roles.USER
これ以外は、自分で定義して使用するしかない。
AuthorizeInstantiation で Roles.ADMIN USER 以外を書いても良い。
3分岐するような画面構成を仕様にするのもどうかと思うが。。。