一般ユーザーのアクセス可能なページ
まずは、一般のユーザーがアクセス可能なページです。これは、Roles.USER(およびRoles.ADMIN)としてログインしている場合にアクセスできます。ログインしていなければアクセスできません。ここでは「IndexPage」として作成をしましょう。テンプレートは「IndexPage.html」として作成をします。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Index</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <h1>Index Page.</h1> <p>※これは、ログインしているユーザーだけが利用できるページです。</p> <p><a wicket:id="link">管理者ページへ</a></p> <p><a wicket:id="link2">ログアウトする</a></p> </body> </html>
ここでは簡単なメッセージのほかに、2つのリンクを用意してあります。管理者ページへのリンクと、ログアウトページへのリンクです。では、「IndexPage.java」を作成しましょう。ソースコードは次のようになります。
package jp.tuyano; import org.apache.wicket.authorization.strategies.role.Roles; import org.apache.wicket.authorization.strategies.role.annotations.AuthorizeInstantiation; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.link.Link; @AuthorizeInstantiation({Roles.ADMIN,Roles.USER}) public class IndexPage extends WebPage { public IndexPage(){ Link<String> link = new Link<String>("link"){ private static final long serialVersionUID = 1L; @Override public void onClick() { this.setResponsePage(Index2Page.class); } }; this.add(link); Link<String> link2 = new Link<String>("link2"){ private static final long serialVersionUID = 1L; @Override public void onClick() { this.setResponsePage(AuthSignOutPage.class); } }; this.add(link2); } }
これも、特に難しいことはありません。ただコンストラクタで2つのLinkコンポーネントを作成し、それぞれonClick
で指定のWebページへ移動するようにしているだけです。では、ページへのアクセス制限はどこで行っているのか。それは、以下の一文です。
@AuthorizeInstantiation({Roles.ADMIN,Roles.USER})
wicket-auth-rolesでは、WebPageクラスへ「@AuthorizeInstantiation
」というアノテーションを記述することで、アクセス制限を設定できるのです。使い方は、引数内にアクセスを許可するユーザー名を{}
の中に記述しておくだけです。複数のユーザーを許可したい場合は、この例のようにカンマで区切って記述します。ここでは、ユーザー名はRolesのクラスフィールドを使って指定していますが、もちろん直接ユーザー名のString
を書いておいてもかまいません。
管理者用ページの作成
続いて、管理者(Roles.ADMIN)のみがアクセス可能なページを作成しましょう。これは「Index2Page」として用意します。まずテンプレートを「Index2Page.html」として作成します。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Index 2</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <h1>ADMIN only.</h1> <p>このページは、管理者のみ利用可能です。</p> </body> </html>
続いて、WebPageクラスです。これは「Index2Page.java」というファイル名で作成し、次のように記述をします。
package jp.tuyano; import org.apache.wicket.authorization.strategies.role.Roles; import org.apache.wicket.authorization.strategies.role.annotations.AuthorizeInstantiation; import org.apache.wicket.markup.html.WebPage; @AuthorizeInstantiation({Roles.ADMIN}) public class Index2Page extends WebPage { public Index2Page(){} }
ここでは、ただ何も機能などないページとして用意してありますが、もちろん実際にはここに管理者のための機能などを実装していくことになるでしょう。ここでも、アノテーションを使い次のようにアクセス権の設定をしています。
@AuthorizeInstantiation({Roles.ADMIN})
これで、Roles.ADMINのみがアクセス可能なページとして設定されます。アノテーションを書くだけで自由にアクセス制限できることの便利さがだんだん分かってきたのではないでしょうか。