開発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

最近のトラブル事例から - Oracle11でDATE型が正しく表示できない –

毎年、4月になると、年度末で開発を終えたシステムが運用を開始して、さまざまなお問い合わせがくる季節で、今年も、例年と同じく、さまざまなご相談を弊社サポートサイトを中心に対応させていただきました。そこで …

no image

iCEC2011 eBuilder AppProducer

4/26に開催された「intra-mart Certified Evangelist Conference 2011(iCEC2011)」での講演資料を公開します。 eBuilder AppProdu …

no image

e Builder Ver.7.2 プラグイン提供計画

e Builder は、Eclipse のプラグインですが現在eclipseや依存するプラグインで構成された「All in One」で提供しています。 しかし、「プラグインで提供してほしい」という声を …

no image

データベースの登録、更新、削除メソッドをカスタマイズする

※下記内容は、過去のintra-mart(Ver4.3以前)に関する内容です。 最新のintra-martでは、異なる情報であることがありますので、ご注意ください。 データベースを操作するプログラムを …

no image

ブラウザキャッシュを利用して少しでもレスポンス向上

こんにちは、開発本部の大西です。 最近の流れから、社内のネットワーク上でなく、インターネット上のSaaS/Cloud環境にintra-martを稼働させてアクセスしたりすることが多くなってきました。 …