開発Blog

intra-mart Advent Calendar 2013 第21日:ルーティングテーブルに認可リソースを設定しないで済ませる方法

投稿日:2013-12-21 更新日:

この記事は、intra-mart Advent Calendar 2013 第21日の記事です。

今回は、AutoRegisteringResourceMapper を紹介させていただきます。
このマッパーを利用すれば、 認可リソースをいちいちルーティングテーブルに設定するという面倒臭さから開放されるのです!

ちょっと誇張し過ぎかも知れません、、、だが、しかし、めげずに説明させていただきますので、お付き合いください。

ルーティングとは?

intra-mart Accel Platformでは、ルーティング機構が搭載されました。
ルータは、クライアントからアクセスされた「 パス 」を元に、ルーティングテーブルの設定にしたがって「 プログラム 」を実行します。

以下のルーティングテーブルを例にしますと、

このマッピングは、「/app/baz」という パス でアクセスされた場合、スクリプト開発モデルの「business/baz」という プログラム を実行することを意味し、実行するためには、 認可リソース 「service://app/baz」の「execute」アクションが許可されている必要がある、ということを意味します。

このルーティングの仕組みにより、プログラムの実体がどのような形式で提供されているかに左右されることなく、よりWebらしい綺麗なURLでアクセスすることが可能となりました。

認可リソースマッパーとは?

ルーティングテーブルは、「 パス 」と「 認可リソース 」のマッピングを定義していますが、そのマッピングを1対1で静的に記述するだけではなく、プログラマブルにマッピングを行うことも可能です。

これは、ルーティングテーブルの認可設定で使用するマッパーを登録することで実現します。

具体的には、、、

  1. jp.co.intra_mart.system.router.authz.user.AuthzResourceMapperインタフェースを実装し、
  2. ルーティングテーブル用 認可リソースマッパー定義設定 に実装したクラスを登録し、
  3. ルーティングテーブルで登録したマッパーを利用するように設定します。

「AutoRegisteringResourceMapper」の紹介

今回は、認可リソースマッパーの一種で、開発用として提供されている 「AutoRegisteringResourceMapper」 を紹介します。

AutoRegisteringResourceMapperとは、与えられたURLパスから自動的にリソースグループを生成し、リソース登録を行うマッパーです。
これにより、「 パス 」と「 認可リソース 」のマッピングを設定することなく、開発を行うことが可能となります。

先ほどのルーティングテーブルの例ですと、

と書き換えることが可能となり、認可リソースのマッピング設定を省略することが可能となります。
つまり、このマッパーを利用すれば、 認可リソースをいちいちルーティングテーブルに設定するという面倒臭さから開放されるのです!(※ なお、AutoRegisteringResourceMapper の利用が、実際に開発するシステムに適しているかどうかは別途検討が必要です)

動かしてみよう

では、実際に動かしながら試してみましょう。

まずは「スクリプト開発モデル プログラミングガイド」の 「基本( intra-mart Accel Platform での初めてのプログラミング) 」を ご覧ください。

「 ステップ6:ルーティング設定ファイルの作成 」で示された

に書き換えてください。

iAPを再起動後、画面にアクセスします。
/helloworld/input にアクセスし、テキストボックスに名前を入力後、[Hello]ボタンをクリックしてください。

これで、自動的に認可リソースが登録されました。
認可設定画面で確認してみましょう。

認可リソースが登録されているのが確認できました。

これにより、例えば、開発時に AutoRegisteringResourceMapperを利用して認可リソースを自動登録させた後、
システム本稼働の際には、自動登録された認可関連データを本番環境へ移行することにより、運用が開始できるかと思います。

なお、URL設計が重要なのは今までと変わりません。頑張ってください!頑張ってください!
わかりやすい実用的なURLを設計する技術を身につけるのに役立つサイトまとめがありましたので、リンクしておきます。
http://matome.naver.jp/odai/2131433482685961901


AutoRegisteringResourceMapper の仕様

正式なドキュメントは今後公開予定ですが、取り急ぎ仕様を以下に記載します。

AutoRegisteringResourceMapper は、与えられたURLパスから自動的にリソースグループを生成し、リソース登録を行うマッパーです。
リソースグループは該当のURLに対して初めてアクセスされた際に生成・登録されます。

生成されるリソースグループは以下のようなルールに従って生成されます。(URLパスの例: aaa/bbb/ccc)

  • URLパスをスラッシュ(/)毎にリソースグループとして登録する(例の場合aaa、bbb、cccの三段階)
  • パスの階層名をリソースグループとして使用する(aaaやbbb))
  • グループに対して名称を登録するロケールは日(ja)、英(en)、中(zh_CN)の3種固定

    • ロケールを追加している場合、該当ロケールに紐づく名称は別途登録が必要です。
    • 認可設定画面や、後述のパラメータ「name.{locale_id}」などを活用して登録してください。
  • ルートからのパス階層をハイフンでつないだ文字列をグループのIDとして使用する。(例のbbbの場合aaa-bbb)
  • 最後に指定のURLパスを"service://{URL PATH}"の形式に埋め込んで、リソースURIとして登録する
  • リソース登録の際、authzタグのパラメータを名称として使用する(引き受けるパラメータのキーは以下のとおり)

    • key: name.{locale_id}

      • value: {locale_id}をロケールとして利用します

また、このマッパーはルーティングの認可パラメータに"auto-permit"という値を指定することによってリソース登録の際に以下のサブジェクトに対する許可ポリシーを自動で設定することが可能です。

  • 認証 - ゲストユーザ
  • 認証 - 認証済みユーザ

auto-permitパラメータの詳細は以下のとおりです。

  • key: auto-permit
  • value: true / false

    • trueの場合、自動で許可ポリシーを登録します。
    • falseの場合、自動で許可ポリシーを登録しません。
    • デフォルト(指定なし)の場合は、falseが指定されます。

auto-permitパラメータを使うことで、

  1. サーバ起動
  2. 初回アクセス(= 403ページ )
  3. 認可設定
  4. 再アクセス

という動きが、

  1. サーバ起動
  2. 初回アクセス(リソース登録 & ポリシー設定)
  3. 認可設定
  4. 再アクセス

に変わり、最初から画面へアクセスすることが可能となり、開発時の利便性が高まります。

以上、今回は「AutoRegisteringResourceMapper」を紹介させていただきました。
このマッパーを利用することにより、認可リソースの追加やルーティングテーブルへのリソース設定を行うことなしに、開発を行うことが可能になるため、認可リソースをいちいちルーティングテーブルに設定するという面倒さから開放される ことを知っていただけたかと思います。

ぜひご活用ください。

 

-開発Blog

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

IM-ContentsSearchでの「あいまい検索」

最近、IM-ContentsSearchの導入事例が増えてきており、以下のようなご質問を受けることが多くなって来ました。 Q:IM-ContentsSearchで「あいまい検索」は可能でしょうか。 例 …

no image

「im-J2EE Framework」仕様書

※下記内容は、過去のintra-mart(Ver4.3以前)に関する内容です。最新のintra-martでは、異なる情報であることがありますので、ご注意ください。 技術者向け資料が新しく公開されました …

no image

intra-mart Advent Calendar 2013 第7日:個人設定メニューの順番を変更する方法(右上のヤーツ)

この記事は、intra-mart Advent Calendar 2013 第7日の記事です。 今回は「個人設定メニューの順番変更方法」をご紹介したいと思います。 intra-mart Accel P …

「高松商店」のデジタル化事例のご紹介

こんにちは。デジタルビジネス推進室の高松です。 今回は、高松商店のちょっとしたデジタル化についてご紹介させて頂きます。 (高松商店をご存知ない方は、こちらの記事をご覧ください!) 高松商店の近況 前回 …

no image

log4jdbcを使ったSQL(JDBC)のトレース

こんにちは、開発本部の榎本です。 開発中にデータベースに対してどのようなクエリが流れているのか確認してみたいことありませんか? 以前、山寺さんが紹介していたResinのログで取得するなど、いろいろな方 …