SHOEISHA iD

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

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

developerWorks Liaison(AD)

企業システムでも使われるウィジェット技術
第2回 「OpenAjax Hub 2.0 による安全なマッシュアップ」

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

管理されないハブによるpublish/subscribeの例

 前述のように、信頼度の異なるウィジェットを単純にマッシュアップすることによるセキュリティ的な脅威が発生するため,管理されたハブのセキュリティ機能が重要になってきます。ただし信頼できるウィジェットを組み合わせてマッシュアップを行う場合(たとえば自分の作成したウィジェットを組み合わせる場合)には、管理されないハブを使用することができます。管理されないハブはプログラムの大きさやパフォーマンスの点で、管理されたハブよりメリットがあります。

 管理されないハブに対してメッセージを発行 (publish) するコードの例を以下に示します。

var myData = { x: 12.3, y: 45.6 };
OpenAjax.hub.publish("org.example.myTopic", myData);

 ここで“org.example.myTopic”はメッセージを発行するトピックの名前、myData は任意のJavaScriptオブジェクトです。

 メッセージを受信する場合は、購読のためのコールバック関数を定義し、トピック名を指定して購読(subscribe) します。

function myCallbackOnDataReceive(topic, data){
    alert(“Received data! x = ” + data.x +”, y = ” + data.y);
}
        var subscription = OpenAjax.hub.subscribe(“org.example.myTopic”
                                                  , myCallbackOnDataReceive);

 subscribe関数は、復帰値として subscription というオブジェクトを返します。購読を中止するときにはこの subscription オブジェクトを指定して、unsubscribe 関数を呼び出します。

OpenAjax.hub.unsubscribe(subscription);

管理されたハブによる publish/subscribe の例

 管理されたハブ (ManagedHub) では、個々のウィジェットをサンドボックス内で実行することにより、ウィジェットを安全にマッシュアップすることができます。管理されたハブはセキュリティを実現するために、より複雑な構造を持っています。(図3)

図3. 管理されたハブの仕組み
図3. 管理されたハブの仕組み

 管理されたハブを使ってウィジェットのマッシュアップを行う手順のおおまかな流れは以下のとおりです。

  1. まず、ホストアプリケーションはOpenAjax Hubのライブラリをロードし、管理されたハブのインスタンス ManagedHub を生成し、保持します。
  2. また,ホストアプリケーションは個々のウィジェットをコンテナの中にロードします。コンテナとはウィジェットのコードをカプセル化するための仕組みの総称ですが、管理されたハブの場合には、サンドボックスを実現するために、HTMLのIFRAME要素がコンテナとして使用されます。
  3. それぞれのコンテナでは、ハブの機能を使用するためのHubClient の機能が提供されます。ウィジェット内のコードはHubClientを使用し、ManagedHub経由でホストアプリケーションや他のウィジェットと通信を行います。
  4. また、ホストアプリケーションはセキュリティ・マネージャ機能をコールバック関数として提供する必要があります。ウィジェットがメッセージの publish / subscribe を行った場合に、このコールバック関数が呼び出され、この中でセキュリティポリシーに応じて、処理を中断するか継続するかといった制御を行うことが可能です。

 以下に、管理されたハブによるウィジェットのマッシュアップ例を見てみましょう。

準備

 管理されたハブではウィジェットをサンドボックス実行するために、各ウィジェットを(少なくとも見た目上)異なるサーバから IFRAMEの中にロードします。一台のマシン上にホストアプリケーションとウィジェットを両方配置するためには、あらかじめ仮想ホストなどの仕組みを使って、同じサーバに異なるサーバ名でアクセスできるようにします.

 以下の例では、ホストアプリケーションを mashup.example.com というサーバから、2つのウィジェットをそれぞれ widget1.example.com、widget2.example.com というサーバからダウンロードしています。自分のパソコン上で簡単に試す場合には、たとえば hosts ファイルに

127.0.0.1        mashup.example.com
127.0.0.1        widget1.example.com
127.0.0.1        widget2.example.com

 のように記述しておくといいでしょう。

 また、OpenAjax Hub 2.0のライブラリをWebサーバ上に展開して、アクセスできるようにしておく必要があります。

 以下の例では、http://mashup.example.com/hub20 というURLの下に、公開されているOpenAjax Hub 2.0のリファレンス実装が展開されていることを前提としています。

次のページ
ホストアプリケーションのソースコード例

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

  • このエントリーをはてなブックマークに追加
developerWorks Liaison連載記事一覧

もっと読む

この記事の著者

吉濱 佐知子(ヨシハマ サチコ)

IBM 東京基礎研究所 専任研究員日本アイ・ビー・エム(株)東京基礎研究所で、情報セキュリティ関係の研究に従事しています。特にWeb 2.0/SaaSのセキュリティ、情報フロー制御や情報漏えい対策技術に興味を持っています。

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

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4610 2009/11/24 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング