rio's blog

おいでいただきありがとうございます。このブログでは、ソフトウェア開発や音楽(特にB'z)、車の事などを主にてきと〜に書いていく予定です。Rio's Laboratory (http://homepage3.nifty.com/rio_i/lab/) にて、いくつか文書とフリーソフトウェアを公開してます。

Wicket の勉強 (3) IAuthorizationStrategy を実装して認証/認可を実現する

前回 は、個人的に気になる話題である国際化の実現について、いろいろな html コンポーネントの使い方に先立って書きました。

今回も、またもや通常の流れから離れて、いきなりユーザ認証/認可について書きたいと思います。何故なら、この辺がうまく解決できないとやっぱり業務で使うことができないから…もちろん Wicket でその辺が出来ないなんてことは無いですので、早いうちに実現方法について学んでおくと良い、と思っています。

JDK5 以上を対象にする場合、wicket-auth-roles という拡張パッケージを使って認証/認可の仕組みを実現できそうなのですが、今回はそれを使わずにほとんどの部分を自分でコーディングする単純な方法(書く量は多い)の方について書きます。多分、wicket-auth-rols の中身を書いていく様な感じになるのだと思います。


認証(Authentication) と認可(Authorization)

先に進む前に、まず認証(Authentication) と認可(Authorization) の違いについて、明記しておきます。

となります。具体的には、ID とパスワードで正しいユーザであることを確認するのが認証で、一般ユーザではアクセスできず管理者ユーザでのみアクセスできる、という様な仕組みが認可となります。

IAuthorizationStrategy

Wicket には org.apache.wicket.authorization.IAuthorizationStrategy というインタフェースがあり、以下の 2 つのメソッドが定義されています。

メソッド 説明
boolean isActionAuthorized(Component component, Action action) 指定 Component に対して、指定 Action を許可するかどうかを判定する。action には Wicket 1.3.4 では Component.ENABLE と Component.RENDER の 2 つが定義されている。Component.ENABLE は component 有効化を許可するかどうか決めるための Action で、Component.RENDER は component およびその子 component の描画を許可するかどうか決めるための Action である
boolean isInstantiationAuthorized(Class componentClass) 指定クラスのインスタンス化を許可するかどうかを判定する。例えばある WebPage クラスに対して false を返すと、その WebPage を閲覧することができなくなる

現在のログイン状態に応じて処理を行う様に上記メソッドを実装した AuthorizationStrategy 実装クラスを、WebApplication#getSecuritySettings()#setAuthorizationStrategy() を用いて設定しておくと、Wicket がページやコンポーネントを表示しようとする度に、自動的にチェックが実行されます。これにより

といった機能を実現できます。

なお、

辺りの基本処理については、独自に実装しないといけません。

サンプルアプリケーション

今回作るサンプルアプリケーションの構造は、↓のクラス図の様になります(クリックすると拡大します)。

クラス図

アプリケーションサーバに配置後のファイル構成は↓の通り。

以下の順序で説明します。



↓Web アプリケーションにアクセスして、最初に表示されるページ
wicket-auth01-01login

↓ログイン失敗の時に表示されるページ
wicket-auth01-02loginfailed

↓通常のユーザでログインした後のページ
wicket-auth01-03userhome

↓管理者ユーザでログインした後のページ
wicket-auth01-04adminhome

↓ログアウトを実行した直後のページ
wicket-auth01-05logout

FC2 Blog Ranking に参加してます。クリックよろしくお願いします!

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2008/07/22(火) 10:00:00|
  2. Wicket
  3. | トラックバック:0
  4. | コメント:0

<<デミオが戻ってきました | ホーム | Wicket の勉強 (2) 国際化(i18n) について>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://rio1218.blog26.fc2.com/tb.php/79-8b5187ab
この記事にトラックバックする(FC2ブログユーザー)