SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaで軽快に使える「軽量フレームワーク」特集

Javaで軽快に使える「軽量フレームワーク」特集
~Apache Wicketで簡単Webアプリ作成(3)

第3回


  • X ポスト
  • このエントリーをはてなブックマークに追加

一般ユーザーのアクセス可能なページ

 まずは、一般のユーザーがアクセス可能なページです。これは、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を書いておいてもかまいません。

IndexPageの表示。管理者ページとログアウトページへのリンクがある
IndexPageの表示。管理者ページとログアウトページへのリンクがある

管理者用ページの作成

 続いて、管理者(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のみがアクセス可能なページとして設定されます。アノテーションを書くだけで自由にアクセス制限できることの便利さがだんだん分かってきたのではないでしょうか。

Index2Pageの表示。管理者のみがアクセスできる
Index2Pageの表示。管理者のみがアクセスできる

次のページ
ログインページの変更

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4461 2009/12/22 09:15

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング