以下、実施形態について、図面を参照しながら詳細に説明する。
図1は、第1実施形態のシステム構成図である。
第1実施形態のシステム100には、2つのネットワーク、すなわち利用者の社内ネットワーク110とアプリケーション提供元サイト170が構築された社外のネットワークが含まれる。利用者の社内ネットワーク110は、例えば企業や学校などの組織のイントラネットであり、LAN(Local Area Network)またはWAN(Wide Area Network)でもよい。アプリケーション提供元サイト170は、例えばアプリケーション提供者(アプリケーションベンダとも言われる)が運営するサイトであり、ウェブアプリケーションを提供するSaaSアプリケーションサーバ180を含む。
利用者の社内ネットワーク110とアプリケーション提供元サイト170は、例えばインターネットを介して接続されている。また、例えば不図示のファイヤウォールにより、利用者の社内ネットワーク110と外部との間の通信は制御されている。
以下では、利用者の社内ネットワーク110内のリソースを「内部リソース」ともいい、SaaSアプリケーションサーバ180上のリソースを「外部リソース」ともいう。内部リソースの中には、利用者の社内ネットワーク110内に秘匿しておきたい(すなわちファイヤウォールの外には出したくない)情報を含むものもある。
なお、本願において、リソースとは、文字データ、画像データ、音声データ、実行可能なプログラムのデータ等の各種形式のデータをいう。
利用者の社内ネットワーク110には、利用者のブラウザ120と中継サーバ130と社内システムサーバ160が含まれる。
利用者のブラウザ120は、例えば、PC(Personal Computer)などのコンピュータ上で動作する一般的なウェブブラウザである。
なお、広義のウェブアプリケーションには、SaaSアプリケーションサーバ180から必要に応じて機能モジュールがクライアントにダウンロード可能なように設計された、ネイティブアプリケーションも含まれる。しかし、第1実施形態においてSaaSアプリケーションサーバ180が提供するウェブアプリケーションは、利用者のブラウザ120を介して実行される、ブラウザベースのものであるとする。
中継サーバ130は、例えば利用者の社内ネットワーク110内に設けられたプロキシサーバであってもよい。CGI(Common Gateway Interface)プロキシが中継サーバ130として機能することもできる。社内システムサーバ160は、利用者の社内ネットワーク110外に出したくない情報を管理するサーバである。
また、中継サーバ130は、認証機能部140と中継機能部150を備える。
認証機能部140は、アプリケーションの利用開始に先立って利用者を識別し、利用者の認証を行う機能を提供する。認証機能部140は、認証部141、セッション管理表142および利用者認証情報143を備える。
中継機能部150は、利用者のブラウザ120とSaaSアプリケーションサーバ180の間の通信を中継する機能、すなわちプロキシ機能を提供する。また、中継機能部150は、リクエスト受付部151、リクエスト先変換部152、書き換えURI(Uniform Resource Identifier)管理表153、ページ内容送受信部154、ページ内容送信部155およびダミーデータ保持部156を備える。
認証部141は、例えば、利用者のブラウザ120に表示される入力画面を介して入力された利用者ID(identifier)とパスワードなどを用いて利用者のブラウザ120を認証する。認証部141は、入力された情報を利用者認証情報143と照合することで利用者を認証する。
利用者認証情報143は、例えば利用者IDとパスワードの組を含み、中継サーバ130が備えるHDD(Hard Disk Drive)などの記憶装置に格納される。利用者認証情報143は、暗号化されていてもよい。
また、認証部141は、利用者が使用している端末(つまり利用者のブラウザ120が実行されているPCなどのコンピュータ)または利用者のブラウザ120の情報を、セッション管理表142に登録する。例えば、利用者のブラウザ120が実行されているコンピュータのネットワークアドレスやホストID、利用者のブラウザ120の種類などの情報が、利用者IDと対応付けられてセッション管理表142に登録されてもよい。
セッション管理表142は、SaaSアプリケーションサーバ180と利用者のブラウザ120との間のセッションを管理するための表である。もちろん、表形式以外のデータ形式が採用されてもよい。セッション管理表142は、中継サーバ130が備えるRAM(Random Access Memory)またはHDDなどの記憶装置に格納される。
認証部141は、利用者IDと対応付けて、SaaSアプリケーションサーバ180のアドレスとセッションを識別するセッション情報との組をさらにセッション管理表142に登録してもよい。セッション情報は、セッションの状態などを示す情報を含んでいてもよい。
セッション管理表142への情報の登録により、認証部141は、利用者のブラウザ120からSaaSアプリケーションサーバ180への後のアクセスに関して、セッションの特定をすることが可能となる。
中継機能部150のリクエスト受付部151は、利用者のブラウザ120からSaaSアプリケーションサーバ180への、外部リソースの参照、作成、更新、削除などを要求するリクエストを受信する。そして、リクエスト受付部151は、受信したリクエストをリクエスト先変換部152に出力する。すると、リクエスト先変換部152は、リクエストの送信元である利用者のブラウザ120の情報を求めてセッション管理表142を検索する。
検索の結果、利用者に関する情報が得られなかった場合は、リクエスト先変換部152は、ページ内容送信部155を介して、エラーメッセージを含むリプライを利用者のブラウザ120に返す。エラーメッセージの内容は、例えば、利用者IDとパスワードを入力しなおすように利用者に促す文章でもよい。
以下では、検索の結果、利用者に関する情報が得られた場合について説明する。この場合、リクエスト先変換部152は、次に、リクエストの対象である外部リソースのURIと、利用者IDとを検索キーにして、書き換えURI管理表153を検索する。なお、以下ではリクエストの対象である外部リソースを「対象外部リソース」ともいう。
書き換えURI管理表153は、詳しくは図10とともに後述するように、利用者IDと書き換え対象URIと書き換え先URIを対応付ける表である。もちろん、表形式以外のデータ形式が採用されてもよい。
書き換えURI管理表153に登録されている各エントリは、利用者の社内ネットワーク110内に秘匿しておきたい各リソースに対応する。以下では、利用者の社内ネットワーク110内に秘匿しておきたいリソースに関しては適切に書き換えURI管理表153にエントリが登録されていると仮定して説明する。
なお、以下の説明において、「書き換え対象URI」とは、外部リソースのURI、または外部リソースのURIの少なくとも一部を含む、パターンマッチング用の文字列パターンである。また、「書き換え先URI」とは、内部リソースのURI、内部リソースの社内システムサーバ160上でのローカルパス、または、内部リソースのURIもしくはローカルパスの少なくとも一部を含む、パターンマッチング用の文字列パターンである。
リクエストが、秘匿したい情報に関するものではない場合、検索の結果、リクエストの対象である外部リソースのURIと利用者IDの組に対応する書き換え先URIが、書き換えURI管理表153に登録されていないと判明する。つまり、対象外部リソースのURIが書き換えの対象ではないことが判明する。
そこで、リクエスト先変換部152は、リクエスト受付部151から出力されたリクエストを、そのままページ内容送受信部154に出力する。すると、ページ内容送受信部154は、リクエスト受付部151が受信したリクエストのペイロードデータを変えずに元のままに保って、リクエストの本来の送信先であるSaaSアプリケーションサーバ180に、リクエストを送信する。
逆に、リクエストが、秘匿したい情報に関するものである場合、リクエスト先変換部152による書き換えURI管理表153の検索の結果、書き換え先URIが特定される。つまり、対象外部リソースのURIが書き換えの対象であることが判明し、対象外部リソースのURIに対応する書き換え先URIが一意に特定される。なお、以下では、特定された書き換え先URIにより識別される内部リソースを、「対象内部リソース」ともいう。
書き換え先URIが特定されると、リクエスト先変換部152は、元のリクエストに含まれている対象外部リソースのURIと、特定された対象内部リソースを示す書き換え先URIをページ内容送受信部154に通知する。また、リクエスト先変換部152は、リクエストをページ内容送受信部154に出力する。
すると、ページ内容送受信部154は、リクエストが要求する操作の種類に応じて、適宜リクエストの内容の書き換えなどを行いつつ、リクエストをSaaSアプリケーションサーバ180と社内システムサーバ160に送信する。リクエストが要求する操作の種類には、例えば、参照、作成、更新、削除などがある。ページ内容送受信部154の動作は、詳しくは後述するが、概説すると次のとおりである。
すなわち、ページ内容送受信部154は、ペイロードデータをダミーデータに置換したリクエストをSaaSアプリケーションサーバ180に送信する。その結果、「秘匿したい対象内部リソースの内容が利用者の社内ネットワーク110の外部に送信される」という事態が回避される。なお、ダミーデータを含むリクエストの送信は、秘密保持の効果だけでなく、リソースに対する操作が行われたことをSaaSアプリケーションサーバ180に認識させる効果もある。
また、ページ内容送受信部154は、本来の宛先とは異なる宛先である社内システムサーバ160にリクエストを送信する。その結果、秘匿したい対象内部リソースに対して、SaaSアプリケーションサーバ180から提供されるアプリケーションを介して、参照、作成、更新、削除などの操作を行うことが可能となる。つまり、外部のSaaSアプリケーションサーバ180から提供されるサービスを利用者が享受するとともに、当該サービスでの操作対象である情報をSaaSアプリケーションサーバ180から秘匿することが可能となる。
ダミーデータ保持部156は上記のダミーデータを保持する。ダミーデータ保持部156の詳細は図12とともに後述する。
また、ページ内容送受信部154は、SaaSアプリケーションサーバ180と社内システムサーバ160からそれぞれリプライを受信する。そして、ページ内容送受信部154は、受信したリプライに基づいて、利用者のブラウザ120に送信するリプライを生成し、ページ内容送信部155に出力する。
ページ内容送信部155は、ページ内容送受信部154から出力されたリプライを利用者のブラウザ120に送信する。
社内システムサーバ160は、リクエスト受付部161とページ内容送信部162を備え、さらに、アプリケーションデータ163を記憶するHDDなどの記憶装置を備えている。
リクエスト受付部161は、ページ内容送受信部154からのリクエストを受信し、受信したリクエストに応じてアプリケーションデータ163の作成、参照、更新、削除などの各種処理を行う。ページ内容送信部162は、処理の結果をページ内容送受信部154に送信する。なお、アプリケーションデータ163は、種々の内部リソースのデータである。
SaaSアプリケーションサーバ180は、リクエスト受付部181とページ内容送信部182を備え、さらに、アプリケーションデータ183を記憶するHDDなどの記憶装置を備えている。
リクエスト受付部181は、ページ内容送受信部154からのリクエストを受信し、受け付けたリクエストに応じてアプリケーションデータ183の作成、参照、更新、削除などの各種処理を行う。ページ内容送信部182は、処理の結果をページ内容送受信部154に送信する。アプリケーションデータ183は、種々の外部リソースのデータである。秘匿の必要がない情報に関しては、実データがアプリケーションデータ183としてSaaSアプリケーションサーバ180に記憶されるが、秘匿したい情報に関しては、実データではなくダミーデータがアプリケーションデータ183として記憶される。
上記のような図1のシステム100は、例えば図2のような環境内に構築されてもよい。図2は、第1実施形態が適用される環境の一例を説明する図である。
図2のシステム200では、ユーザ企業Aの社内ネットワーク210とユーザ企業Bの社内ネットワーク220とアプリケーション提供元サイト240がネットワーク250を介して接続されている。
ユーザ企業Aの社内ネットワーク210は、例えばLANやWANでもよい。ユーザ企業Aの社内ネットワーク210にはファイヤウォール211が設けられており、ファイヤウォール211は、ユーザ企業Aの社内ネットワーク210とネットワーク250の間の通信を制御する。また、ユーザ企業Aの社内ネットワーク210内にはブラウザ212が稼働するPCなどが含まれる。
同様に、ユーザ企業Bの社内ネットワーク220は、例えばLANやWANでもよい。ユーザ企業Bの社内ネットワーク220にもファイヤウォール221が設けられており、ファイヤウォール221は、ユーザ企業Bの社内ネットワーク220とネットワーク250の間の通信を制御する。また、ユーザ企業Bの社内ネットワーク220内にはブラウザ222が稼働するPCなどが含まれる。
アプリケーション提供元サイト240ではSaaSアプリケーションサーバ241が稼働している。SaaSアプリケーションサーバ241は、企業Aのデータと企業Bのデータの双方を含むアプリケーションデータ242を格納する記憶装置を備えている。SaaSアプリケーションサーバ241は、アプリケーションデータ242を用いて、例えば、顧客管理機能243、サプライチェーン管理機能244、またはグループウェア機能245などを企業Aと企業Bにそれぞれ提供する。すなわち、SaaSアプリケーションサーバ241は、これらの機能を実現するウェブアプリケーションをサービスとして提供する。
具体的には、ブラウザ212はネットワーク250を介してSaaSアプリケーションサーバ241にアクセスし、少なくとも画面表示のコード213を取得する。画面表示のコード213は、具体的には、例えばHTML(HyperText Markup Language)文書である。ブラウザ212は、画面表示のコード213にしたがって画面を表示し、画面を介してユーザからの入力を受け付けることで、SaaSアプリケーションサーバ180により提供されるアプリケーションのフロントエンドとして機能する。
同様に、ブラウザ222も、ネットワーク250を介してSaaSアプリケーションサーバ241にアクセスし、少なくとも画面表示のコード223を取得する。そして、ブラウザ222も、画面表示のコード223にしたがって画面を表示し、画面を介してユーザからの入力を受け付けることで、SaaSアプリケーションサーバ180により提供されるアプリケーションのフロントエンドとして機能する。
したがって、アプリケーション提供元サイト240に蓄積されるアプリケーションデータ242は、上記のように、異なる複数の企業のユーザのデータを含む。
以上のような図2の環境において、例えばユーザ企業Aの社内ネットワーク210に図1の中継サーバ130と社内システムサーバ160が追加されてもよい。このように、既存のアプリケーション提供元サイト240に影響を与えることなく、第1実施形態をユーザ企業Aの社内ネットワーク210に適用することができる。
上記のように図1のシステム100が図2の環境で用いられる場合、図1の利用者のブラウザ120は、例えば図2のブラウザ212に相当する。また、図1のアプリケーション提供元サイト170が図2のアプリケーション提供元サイト240に相当し、図1のSaaSアプリケーションサーバ180が図2のSaaSアプリケーションサーバ241に相当する。また、図1のアプリケーションデータ183は図のアプリケーションデータ242に相当する。
ところで、アプリケーションによっては、画面表示のコード213だけではなく、JavaScript(登録商標)などのスクリプト言語で記述されたクライアント側プログラムも、SaaSアプリケーションサーバ180からブラウザ212に読み込まれる。ブラウザ212がクライアント側プログラムを実行することで、ウェブページのリロードを伴わずに、利用者の操作に応じて即時かつ動的にブラウザ212の画面の内容を変更することが可能となる。
近年では、クライアントの性能向上とともに上記のようなクライアント側プログラムを利用したウェブアプリケーションが広まりつつある。例えば、文書作成や表計算など、従来は専用プログラムを用いて行われていた処理を行うことができるウェブアプリケーションも登場している。
したがって、企業内の活動で利用されるアプリケーションの多くも、SaaSアプリケーションとして安価に提供されるようになりつつある。つまり、企業内の個々のコンピュータのそれぞれに専用プログラムをインストールしなくても、企業内の活動のためのアプリケーションをサービスとして利用することが可能になりつつある。
ところが、図2のシステム200のような環境では、従来、企業ユーザがアプリケーション提供元サイト240の利用をためらうことがあった。なぜなら、例えば、企業Aのデータが、インターネットなどのネットワーク250を経由してアプリケーション提供元サイト240に送信されるからである。そして、企業Aのデータが、企業Aの管轄下にあるユーザ企業Aの社内ネットワーク220ではなく、企業Aの管轄下にないアプリケーション提供元サイト240に、アプリケーションデータ242として蓄積されるからである。
アプリケーション提供元サイト240の運営者は、アプリケーション提供元サイト240がセキュアであることを主張するかもしれない。しかし、企業にとって情報漏洩は重大な問題であり、企業活動に関係するデータは可能な限り社外に出さないことが望ましい。
そのため、企業Aは、データがアプリケーション提供元サイト240から漏洩することを心配して、SaaSアプリケーションサーバ241の利用をためらうことがある。企業Aは、例えば、顧客管理機能243により管理される顧客情報がアプリケーション提供元サイト240から漏洩することを心配するかもしれない。
そのため、現状では、たとえ優れたSaaSアプリケーションが提供されているとしても、企業のポリシーとして、SaaSアプリケーション利用を手控える企業も多い。
しかし、本発明の各実施形態を適用することにより、図2のような環境においても、外部に出したくない情報を内部ネットワークに秘匿したまま、外部のアプリケーション提供元サイト240などからサービスを受けることが可能となる。例えば、企業Aは、企業Aにとって重要な情報である顧客情報をユーザ企業Aの社内ネットワーク210内に秘匿したまま、SaaSアプリケーションサーバ241から、顧客管理機能243のサービスを享受することができるようになる。また、各実施形態によれば、情報の種類やデータ形式によらず、任意の情報を内部ネットワークに秘匿しておくことも可能である。
以下、上記のような利点を有する各実施形態について詳しく説明する。
図3は、第1実施形態による動作の説明図である。図3には、図1と同様に、利用者の社内ネットワーク110とアプリケーション提供元サイト170を含むシステム100が示されている。また、図3には図1の一部の要素のみが抜粋されて示されているとともに、図1には不図示の要素が示されている。
すなわち、利用者の社内ネットワーク110には図1と同様に、利用者のブラウザ120、中継サーバ130および社内システムサーバ160が含まれる。また、利用者の社内ネットワーク110と外部との通信はファイヤウォール111により制御されている。図3では、中継サーバ130の構成要素のうち書き換えURI管理表153とダミーデータ保持部156のみが抜粋されて示されており、社内システムサーバ160の構成要素のうちアプリケーションデータ163のみが抜粋されて示されている。
また、アプリケーション提供元サイト170には図1と同様のSaaSアプリケーションサーバ180がある。図3では図示の都合上、アプリケーションデータ183がSaaSアプリケーションサーバ180の外側に示してある。アプリケーションデータ183は、SaaSアプリケーションサーバ180に記憶されていてもよく、アプリケーション提供元サイト170内の不図示の他のデータベースサーバなどに記憶されていてもよい。
ところで、従来の一般的なウェブアプリケーションでは、サーバ側で実行されるプログラムによりアプリケーションのロジックが実装され、HTMLページのリロードにより画面が遷移していた。しかし、クライアント用のコンピュータの性能の向上につれて近年では、上記のようにクライアント側プログラムを利用するウェブアプリケーションも増えてきている。一例として、現在、リッチクライアントを実現するAjax(登録商標)(Asynchronous JavaScript + XML)技術が注目を集めている。
Ajaxアプローチを採用したウェブアプリケーションでは、クライアント側で実行されるJavaScriptプログラムにより、アプリケーションのロジックの一部(ときには大部分)が実装される。そして、JavaScriptの組み込みオブジェクトであるXMLHttpRequestを用いて、クライアントはサーバとHTTP(HyperText Transfer Protocol)通信を行う。
XMLHttpRequestオブジェクトによる通信は、典型的には非同期通信だが、同期通信でもよい。クライアントは、JavaScriptプログラムにしたがって、通信結果を用いて動的にページを書き換えることで、ウェブページ全体のリロードを行うことなく表示内容を変化させることができる。
以下、第1実施形態においてSaaSアプリケーションサーバ180が提供するアプリケーションでは、XMLHttpRequestによる非同期通信が行われ、XML(eXtensible Markup Language)データが送受信されるものとする。
図3において、SaaSアプリケーションサーバ180には、画面表示および処理ロジックのコード184が記憶されている。画面表示および処理ロジックのコード184は、例えば、以下の(a)と(b)を含んでもよいし、(c)を含んでもよいし、その他の(a)〜(c)の適宜の組み合わせであってもよい。
(a)画面表示用のHTMLソースコードを生成するための、スクリプト言語などで書かれたコード。
(b)生成されたHTMLソースコードからリンクされ、利用者のブラウザ120に読み込まれるJavaScriptソースコード。
(c)HTMLソースコードと、HTMLソースコードに埋め込まれるJavaScriptソースコードの双方を生成するための、スクリプト言語などで書かれたコード。
例えば、画面表示および処理ロジックのコード184は少なくともHTMLソースコードを生成するための何らかのプログラムコードを含むとする。この場合、まず、利用者のブラウザ120が中継サーバ130を介してSaaSアプリケーションサーバ180にアクセスすると、画面表示および処理ロジックのコード184をSaaSアプリケーションサーバ180が実行する。そして、その結果生成されたHTMLソースコードが中継サーバ130を介して利用者のブラウザ120に送信される。
また、利用者のブラウザ120に送信されたHTMLソースコードには、JavaScriptソースファイルへのリンクまたはJavaScriptソースコードそのものが埋め込まれている。リンクされたJavaScriptソースファイルもSaaSアプリケーションサーバ180から利用者のブラウザ120へと読み出される。したがって、JavaScriptコードがHTMLソースコード内に埋め込まれているか否かとは関係なく、利用者のブラウザ120には、画面表示および処理ロジックのコード121が読み出される。
したがって、利用者のブラウザ120は、HTMLソースコードに基づいてウェブページを表示するとともに、読み出したJavaScriptプログラムを実行する。JavaScriptプログラムには、例えば利用者からの入力などのイベントを契機として、XMLHttpRequestオブジェクトを用いてSaaSアプリケーションサーバ180と通信を行う処理のコードが含まれる。
XMLHttpRequestオブジェクトを利用してHTTPリクエストを発行することで、利用者のブラウザ120は、ウェブページのリロードを伴わずに、XMLデータの参照や更新などを行うことができる。そして、動的に参照または更新されるXMLデータに基づいて、利用者のブラウザ120は、動的に画面の表示内容を変化させることができる。
発行されたHTTPリクエストによって要求される参照や更新などの操作の対象は、アプリケーションを提供するSaaSアプリケーションサーバ180上の外部リソースである。また、図1に関して説明したように、中継サーバ130内の書き換えURI管理表153には、利用者IDと書き換え対象URIと書き換え先URIが対応付けられて記憶されている。
そして、中継サーバ130では、利用者のブラウザ120から発行されたHTTPリクエストの対象である対象外部リソースのURIに対応する書き換えURIを求めて書き換えURI管理表153が検索される。対象内部リソースに対応する書き換え先URIが特定された場合、中継サーバ130は、XMLHttpRequestオブジェクトによるデータの参照リクエストや変更リクエストなどを、送信先を社内システムサーバ160に変更して転送する。また、中継サーバ130からは、ペイロードデータがダミーデータに書き換えられたリクエストがSaaSアプリケーションサーバ180に送信される。
なお、以上の説明から明らかなように、第1実施形態では、SaaSアプリケーションサーバ180だけでなく社内システムサーバ160も、HTTPリクエストを受け付けて応答する機能を有する。例えば、社内システムサーバ160には、ウェブサーバソフトウェアがインストールされていてもよい。
具体的には、社内システムサーバ160は、リソースの参照、作成、更新および削除を要求するHTTPリクエストを、少なくとも中継サーバ130からは受け入れるよう、設定されている。また、社内システムサーバ160は、中継サーバ130内のページ内容送受信部154以外からのHTTPリクエストに対しては、「Forbidden」や「Not Found」などのステータスを通知することができる。あるいは、社内システムサーバ160は、元のHTTPリクエストを発した利用者のブラウザ120での利用者IDに基づく認証を行ってもよい。
続いて、図3を参照して説明した上記の動作の長所の理解を助けるため、図4〜図7を参照して4つの比較例について説明する。
図4は、第1比較例による動作の説明図である。第1比較例は、サーバ側で各種処理が行われるウェブアプリケーションの例である。
図4のシステム300は、利用者の社内ネットワーク310とアプリケーション提供元サイト320を含む。利用者の社内ネットワーク310と外部との通信はファイヤウォール311により制御されている。利用者は、利用者の社内ネットワーク310内のブラウザ312、ファイヤウォール311およびネットワークを介して、アプリケーション提供元サイト320内のSaaSアプリケーションサーバ321から提供されるサービスを受けることができる。
すなわち、SaaSアプリケーションサーバ321には、アプリケーションデータ322と、アプリケーションの処理ロジックのコード323と、画面表示のコード324が格納されている。処理ロジックのコード323は、例えばスクリプト言語で書かれており、SaaSアプリケーションサーバ321により実行される。また、画面表示のコード324は静的なHTMLソースコードでもよいし、HTMLソースコードを生成するためのコードであってもよいし、両者が使われてもよい。
例えば、図4に示すように、ブラウザ312は、まずアプリケーションの初期画面をSaaSアプリケーションサーバ321に要求する。すると、SaaSアプリケーションサーバ321からは画面表示内容がブラウザ312に送信される。つまり、画面表示のコード324として記憶されている静的なHTMLソースコード、あるいはスクリプト言語などで記述された画面表示のコード324に基づいて生成されたHTMLソースコードがブラウザ312に送信される。
ブラウザ312は、SaaSアプリケーションサーバ321から送信された画面表示のコード313(すなわちHTMLソースコード)にしたがい、画面を表示する。表示される画面には、入力フィールドやボタンなどが含まれる。利用者がブラウザ312の画面内の入力フィールドにデータを入力し、次画面をロードするための、例えばボタン押下などの動作をすると、ブラウザ312は、ボタンが押下されたというイベントを検出する。そして、ブラウザ312は、利用者の指示にしたがって次画面をSaaSアプリケーションサーバ321に要求するとともに、入力されたデータをSaaSアプリケーションサーバ321に送信する。
SaaSアプリケーションサーバ321は、ブラウザ312から受け取ったデータを入力として使用して処理ロジックのコード323を実行する。例えば、処理ロジックのコード323の実行により、次画面を表すHTMLソースコードが生成されてもよい。また、ブラウザ312から送信されたデータは、処理ロジックのコード323の実行の結果として、必要に応じて加工され、アプリケーションデータ322として格納されてもよい。
そして、次画面の表示内容がSaaSアプリケーションサーバ321からブラウザ312に送信され、ブラウザ312は次画面を表示する。システム300では、以上のようにして、ウェブページのリロードにより画面表示の更新(すなわち画面遷移)が実現される。
ところが、上記の説明から明らかなように、システム300においては、SaaSアプリケーションサーバ321が提供するアプリケーションにより扱われるアプリケーションデータ322は、アプリケーション提供元サイト320内に格納される。
よって、アプリケーションデータ322の内容が、利用者の社内ネットワーク310の外部に保存したくない内容である場合、利用者はSaaSアプリケーションサーバ321が提供するアプリケーションを使用しないことに決めるかもしれない。例えば、SaaSアプリケーションサーバ321が優れた顧客管理アプリケーションを提供していても、顧客データを自社外に保存したくない企業は、SaaSアプリケーションサーバ321を使用しないかもしれない。
このように、第1比較例では、アプリケーション提供元サイト320の運営者は、潜在的な利用者を失ってしまい、利用者は、優れたSaaSアプリケーションを使用することによる様々な利益を得られない、ということが考えられる。それに対し、図1と図3に示した第1実施形態では、利用者は、秘匿したい情報は利用者の社内ネットワーク110内に秘匿しつつ、SaaSアプリケーションサーバ180が提供するアプリケーションの機能を利用することができる。したがって、第1実施形態は、第1比較例と比べると、アプリケーションの提供者にとっても利用者にとっても利点が大きい。
また、アプリケーションデータを社内ネットワーク内に保存するように第1比較例を変形した第2比較例も考えられる。図5は、第2比較例による動作の説明図である。
図5のシステム400は、利用者の社内ネットワーク410とアプリケーション提供元サイト420を含む。利用者の社内ネットワーク410と外部との通信はファイヤウォール411により制御されている。利用者は、利用者の社内ネットワーク410内のブラウザ412、ファイヤウォール411およびネットワークを介して、アプリケーション提供元サイト420内のSaaSアプリケーションサーバ421から提供されるサービスを受けることができる。
SaaSアプリケーションサーバ421には、処理ロジックのコード422と、不図示の画面表示のコードが格納されている。ブラウザ412は、図4のブラウザ312と同様にしてSaaSアプリケーションサーバ421に画面表示を要求し、HTMLソースコードを取得して、画面を表示することができる。
また、第1比較例とは異なり、第2比較例では、利用者の社内ネットワーク410内に社内システムサーバ413が設けられ、社内システムサーバ413にアプリケーションデータ414が格納される。しかし、このような第2比較例では、SaaSアプリケーションサーバ421が提供するアプリケーションによりデータを作成して保存したり、保存されたデータを参照または更新したりすることができない。
なぜなら、第2比較例でも第1比較例と同様に、アプリケーションの処理ロジックのコード422はSaaSアプリケーションサーバ421にあり、サーバ側で処理が行われるからである。したがって、第2変形例においてアプリケーションの処理内でアプリケーションデータ414を操作するには、SaaSアプリケーションサーバ421が、ファイヤウォール411を越えて社内システムサーバ413にアクセスする必要がある。
よって、一時的であろうとアプリケーションデータ414が利用者の社内ネットワーク410の外部に送信されることを避けたいと利用者が望むならば、第2比較例のアプローチは採用することができない。
また、「アプリケーションデータ414が、必要に応じてその都度SaaSアプリケーションサーバ421によりアクセスされるだけで、利用者の社内ネットワーク410の外部に不揮発的に蓄積されることがなければ容認可能である」という立場もありうる。しかし、利用者がそのような立場をとっている場合でも、第2比較例では、SaaSアプリケーションサーバ421が提供するアプリケーションによりデータを作成して保存したり、保存されたデータを参照または更新したりすることができない。
なぜなら、企業などの組織では、情報漏洩を防ぐため、一般にイントラネットへの外部からのアクセスを拒絶するようにファイヤウォールが設定されているからである。また、SaaSアプリケーションサーバ421から社内システムサーバ413へのアクセスのみ例外的に認めるようにファイヤウォールの設定を変えることは、セキュリティホールの原因となりかねないので、好ましくない。
したがって、結局、第2比較例では、外部のSaaSアプリケーションサーバ421からの、利用者の社内ネットワーク410内の社内システムサーバ413へのアクセスは、ファイヤウォール411により拒絶される。
以上から、第2比較例では、SaaSアプリケーションサーバ421が処理ロジックのコード422にしたがってアプリケーションデータ414を処理することさえできない。よって第2比較例では利用者はアプリケーションの恩恵を受けることができないので、第2比較例と比べた第1実施形態の利点は明らかである。
図6は、第3比較例による動作の説明図である。Ajax技術への注目が高まるにつれて、アプリケーションのロジックの一部(ときには大部分)が、クライアント側でのプログラム実行により実現されるタイプのアプリケーションも増えてきた。第3比較例においても、アプリケーションのロジックを実現するためのプログラムがクライアント側で実行される。
具体的には、システム500は、利用者の社内ネットワーク510とアプリケーション提供元サイト520を含む。利用者の社内ネットワーク510と外部との通信はファイヤウォール511により制御されている。また、アプリケーション提供元サイト520内のSaaSアプリケーションサーバ521は、アプリケーションデータ522と、画面表示および処理ロジックのコード523を記憶している。画面表示および処理ロジックのコード523は、例えば、画面表示のためのHTMLソースコードを生成するとともに、クライアント側で実行されるJavaScriptプログラムのソースコードを生成するコードであってもよい。
利用者の社内ネットワーク510内のブラウザ512は、ファイヤウォール511とネットワークを介して、アプリケーション提供元サイト520内のSaaSアプリケーションサーバ521にアクセスし、アプリケーションの初期画面を要求する。すると、SaaSアプリケーションサーバ521は画面表示および処理ロジックのコード523に基づいて、画面表示のためのHTMLソースコードとJavaScriptソースコードをブラウザ512に送信する。
ブラウザ512は、送信された画面表示および処理ロジックのコード513(具体的にはHTMLソースコードとJavaScriptプログラムのソースコード)にしたがって、画面を表示するとともに、JavaScriptプログラムを実行する。ブラウザ512が取得したJavaScriptプログラムのソースコードには、XMLHttpRequestオブジェクトを使ってHTTP通信によりXMLデータを参照するなどしてブラウザ512が動的にページを書き換えるためのソースコードが含まれる。
ところが、JavaScriptプログラムの実行によりブラウザ512がHTTP通信によりXMLデータにアクセスするためには、XMLデータはSaaSアプリケーションサーバ521になくてはならない。つまり、図6に示すように、処理は利用者の社内ネットワーク510内のブラウザ512で行われるにもかかわらず、アプリケーションデータ522はアプリケーション提供元サイト520になくてはならない。
その理由は、SOP(Same Origin Policy)と呼ばれるセキュリティ上の制約をブラウザ512が持っているからである。SOPによれば、XMLHttpRequestオブジェクトによりブラウザ512がデータを送信することができるのは、SaaSアプリケーションサーバ521に限定される。よって、アプリケーションデータ522はSaaSアプリケーションサーバ521に記憶される必要がある。
このように、第3比較例では、アプリケーションデータ522が利用者の社内ネットワーク510の外部で管理される。したがって、第1比較例と同様に、第3比較例においても、アプリケーションデータ522の内容が、利用者の社内ネットワーク510の外部に保存したくない内容である場合、利用者はSaaSアプリケーションサーバ521の利用をあきらめるかもしれない。よって、利用者が、秘匿したい情報は利用者の社内ネットワーク110内に秘匿しつつ、SaaSアプリケーションサーバ180が提供するアプリケーションの機能を利用することが可能な第1実施形態は、第3比較例と比べても優れている。
図7は、第4比較例による動作の説明図である。
第3比較例と同様に、図7のシステム600は、利用者の社内ネットワーク610とアプリケーション提供元サイト620を含み、ファイヤウォール611が利用者の社内ネットワーク610と外部との通信を制御している。また、利用者の社内ネットワーク610内のブラウザ612はアプリケーション提供元サイト620内のSaaSアプリケーションサーバ621にアクセスする。その結果、ブラウザ612は、画面表示および処理ロジックのコード622に基づいてSaaSアプリケーションサーバ621から送信される画面表示および処理ロジックのコード615を取得する。
第3比較例と異なる点は、第4比較例では利用者の社内ネットワーク610内に社内システムサーバ613が設けられ、アプリケーションデータ614が社内システムサーバ613に格納される点である。したがって、第4比較例ではアプリケーションデータ614が利用者の社内ネットワーク610の外部には送信されない。
しかし、システム600においてはそもそもアプリケーションが機能しない。なぜなら、第3比較例について説明したように、ブラウザ612がXMLHttpRequestオブジェクトを用いてアプリケーションデータ614を参照しようとすると、SOPにより参照リクエストは拒絶されるからである。
以上説明した4つの比較例のいずれにおいても、外部のサーバから提供されるアプリケーションを、アプリケーションで使用する情報を外部から秘匿したままで利用することはできない。それに対し、図1および図3に示した第1実施形態のシステム100では、外部のサーバから提供されるアプリケーションを、アプリケーションで使用する情報を外部に送信することなく、利用することができる。以下ではこのような利点を有する第1実施形態について、さらに詳しく説明する。
なお、第1実施形態は、近年注目を集めるようになってきているREST(Representational State Transfer)スタイルに準じるウェブアプリケーションに適用されることを前提としているので、ここでRESTについて簡単に説明する。RESTはインターネット上のデータを扱うスタイルの1つである。
RESTの基本的な考え方は、データなどのリソースに一意なURIを対応させ、HTTPだけでそのデータの参照、作成、更新および削除を表現するという考え方である。RESTスタイルに準じることでインターネット経由でのデータの利用が容易になることから、今後、RESTスタイルに準じるアプリケーションが増えることが予想されている。
図8は、RESTについて説明する図である。図8において、システム700は企業Aの社内ネットワーク710とアプリケーション提供元サイト720を含む。
企業Aの社内ネットワーク710内のブラウザ711は、アプリケーション提供元サイト720内の、「example.com」というホスト名のSaaSアプリケーションサーバ721が提供するアプリケーションを利用する。SaaSアプリケーションサーバ721において、企業Aは、「acompany」という利用者IDで管理されているとする。
SaaSアプリケーションサーバ721はアプリケーションデータ722を管理している。なお、SaaSアプリケーションサーバ721は不図示の企業Bにもアプリケーションをサービスとして提供している。そのため、アプリケーションデータ722には、企業Aのデータ723だけでなく、企業Bのデータ724も含まれる。企業Aのデータ723は、「data200812181234」という識別子により識別されるデータ725と、「data200901100954」という識別子により識別されるデータ726を含む。また、企業Bのデータ724は、「data200812241430」という識別子により識別されるデータ727を含む。
例えば、データ725というリソースは、「http://example.com/data/acompany/data200812181234」というURIにより識別される。また、データ726というリソースは、「http://example.com/data/acompany/data200901100954」というURIにより識別される。そして、企業BがSaaSアプリケーションサーバ721において「bcompany」という利用者IDで管理されていれば、データ727は、「http://example.com/data/bcompany/data200812241430」というURIにより識別される。
このように、RESTスタイルに準じるアプリケーションにおいて使用される個々のリソースは、それぞれ一意なURIに対応している。
また、上記のように、RESTスタイルでは、リソースに対する参照、作成、更新および削除の各操作がHTTPのみで表現される。具体的には、リソースの参照、作成、更新および削除は、それぞれHTTPのGETメソッド、POSTメソッド、PUTメソッドおよびDELETEメソッドにより表現される。
例えば、ブラウザ711は、既存のデータ725の参照を要求するとき、リクエストラインにGETメソッドとデータ725のURIを指定したHTTPリクエストを、SaaSアプリケーションサーバ721に送信する。すると、SaaSアプリケーションサーバ721は、HTTPリクエストに対する処理結果を表すステータス(例えば「OK」など)とともに、データ725の内容を、ブラウザ711に送信する。
また、ブラウザ711は、既存のデータ725の更新を要求するとき、リクエストラインにPUTメソッドとデータ725のURIを指定し、更新したい内容をメッセージボディに含めたHTTPリクエストを、SaaSアプリケーションサーバ721に送信する。すると、SaaSアプリケーションサーバ721は、データ725の内容を、メッセージボディに指定された内容に更新し、HTTPリクエストに対する処理結果を表すステータス(例えば「OK」など)をブラウザ711に送信する。
さらに、ブラウザ711は、既存のデータ725の削除を要求するとき、リクエストラインにDELETEメソッドとデータ725のURIを指定したHTTPリクエストを、SaaSアプリケーションサーバ721に送信する。すると、SaaSアプリケーションサーバ721は、データ725を削除し、HTTPリクエストに対する処理結果を表すステータス(例えば「OK」など)をブラウザ711に送信する。
また、図8には示していないが、新規リソースの作成は次のように行われる。
SaaSアプリケーションサーバ721上には、新規リソースを作成してアプリケーションデータ722として保存するための特別なプログラムのデータが存在する。その特別なプログラムはSaaSアプリケーションサーバ721により実行される。上記のとおり、一般的にプログラムのデータもリソースの1種であるから、上記特別なプログラムのデータも、URIにより識別される。以下では上記の特別なプログラムのデータを「特別なリソース」ともいう。
ブラウザ711は、新規のデータの作成を要求するとき、HTTPリクエストのリクエストラインにPOSTメソッドと上記の特別なリソースを識別するURIを指定し、メッセージボディに、作成したいリソースの内容を含める。そして、ブラウザ711は、HTTPリクエストをSaaSアプリケーションサーバ721に送信する。
すると、SaaSアプリケーションサーバ721は、新たなリソースを識別するための新たなURIを生成し、SaaSアプリケーションサーバ721上の、上記の新たなURIに対応する場所に、上記の特別なリソースを使って新規のリソースを作成する。作成されたリソースの内容はHTTPリクエストで指定された内容である。
そして、SaaSアプリケーションサーバ721は、HTTPレスポンスをブラウザ711に送信する。そのHTTPレスポンスのレスポンスラインには、HTTPリクエストに対する処理結果を表すステータス(例えば「Created」など)が含まれ、「Location」レスポンスヘッダフィールドには上記の新たなURIが含まれる。したがって、ブラウザ711は、新規に作成されたデータのURIを認識することができる。
第1実施形態では、以上説明したようなRESTスタイルに準じることを前提として、図1のSaaSアプリケーションサーバ180がアプリケーションを提供している。以下、図9〜図17を参照して、図1の中継機能部150の動作を詳細に説明する。
図9は、第1実施形態によるページ内容送信処理のフローチャートである。図9の処理の契機は、利用者のブラウザ120からのHTTPリクエスト(以下、「HTTPリクエスト」を単に「リクエスト」ということがある)の受信である。
すなわち、リクエスト受付部151は、利用者のブラウザ120からXMLHttpRequestオブジェクトによるリクエストを受信し、受信したリクエストをリクエスト先変換部152に出力する。すると、リクエスト先変換部152は利用者のブラウザ120の情報を求めてセッション管理表142を検索する。検索の結果、利用者IDなど利用者に関する情報が得られると、図9の処理が開始される。
ステップS101でリクエスト先変換部152は、セッション管理表142から得た利用者IDと、リクエスト受付部151から受け取ったリクエストが要求している対象外部リソースのURIを検索キーにして、書き換えURI管理表153を検索する。そして、リクエスト先変換部152は、書き換えURI管理表153から、書き換え先のURIのパターンを得る。
図10は、第1実施形態による書き換えURI管理表の例を示す図である。書き換えURI管理表153は、SaaSアプリケーションの利用に先立って、利用者などにより適宜設定されている。
第1実施形態における書き換えURI管理表153は、利用者IDを示す「利用者」列と、外部リソースを判別する外部リソース判別情報を示す「書き換え対象URI」列と、内部リソースを判別する内部リソース判別情報を示す「書き換え先URI」列を有する。
ここで、「書き換え対象URI」列の内容は、外部リソースを一意に識別するURIそのものでもよいし、外部リソースのURIの少なくとも一部を含む文字列パターンでもよい。文字列パターンは、例えば、ワイルドカード、正規表現、変数などを含んでいてもよい。なお、文字列パターンは、リソースを一意に識別することができるとは限らないが、リソースを絞り込むことはできるので、上記では「外部リソース判別情報」のように「判別」という語を用いた。
また、「書き換え対象URI」列の内容は、内部リソースを一意に識別するURIそのものでもよいし、内部リソースがアプリケーションデータ163として記憶される社内システムサーバ160の記憶装置における内部リソースの保存場所を示すローカルパスでもよい。あるいは、「書き換え対象URI」列の内容は、内部リソースのURIまたはローカルパスの少なくとも一部を含む文字列パターンでもよい。文字列パターンは、例えば、ワイルドカード、正規表現、変数などを含んでいてもよい。
具体的には、例えば、図1のSaaSアプリケーションサーバ180のURIが「http://www.app1.com/」であるとする。また、SaaSアプリケーションサーバ180の社内システムサーバ160のURIが「http://data.mycompany.com/」であるとする。
この場合、例えば図10に示すようなデータ801が書き換えURI管理表153に含まれる。データ801は、外部リソース判別情報と内部リソース判別情報とを対応付ける対応付け情報の具体例である。
すなわち、図10の1行目に示すエントリは「yamada」という利用者IDと「http://www.app1.com/data*」という文字列パターンと「http://data.mycompany.com/yamada/app1/data」という文字列パターンを対応付けるエントリである。なお、以下の説明で「*」という文字はパターンマッチングにおけるワイルドカードを示す。
図10のデータ801はさらに2つのエントリも例示している。2行目のエントリは、「tanaka」という利用者IDと「http://www.app1.com/data*」という文字列パターンと「http://data.mycompany.com/tanaka/app1/data」という文字列パターンを対応付けるエントリである。また、3行目のエントリは、「tanaka」という利用者IDと「http://www.app2.com/schedule*」という文字列パターンと「http://data.mycompany.com/tanaka/app2/data」という文字列パターンを対応付けるエントリである。
なお、1行目と2行目のエントリを比較すると分かるように、「書き換え対象URI」列の同じ「http://www.app1.com/data*」という文字列パターンに対して、利用者ごとに異なる書き換え先URIが対応付けられていてもよい。
例えば、社内システムサーバ160は、利用者IDごとに別のディレクトリに分けてアプリケーションデータ163を格納するという方針にしたがって運用されているかもしれない。それに対し、SaaSアプリケーションサーバ180では、利用者IDごとに別のディレクトリに分けることはしていないかもしれない。例えばそのような場合に、1行目と2行目のエントリのように、同じ書き換え対象URIに対して、利用者ごとに異なる書き換え先URIが対応付けられることがある。
また、実施形態によっては、複数台の社内システムサーバにアプリケーションデータが分散され、格納されてもよい。その場合、例えば利用者に応じて、どの社内システムサーバにデータが格納されるかが異なるかもしれない。そのような場合にも、「利用者」列があれば、利用者ごとに適切に書き換え対象URIと書き換え先URIの組を設定することができる。
ここで図9の説明に戻る。例えば、「yamada」という利用者IDの利用者が利用者のブラウザ120を利用しており、利用者のブラウザ120から、「http://www.app1.com/data/companya/data200812241430」というURIを操作対象とするリクエストが送信されるとする。すると、ステップS101においてリクエスト先変換部152は、「yamada」という利用者IDと「http://www.app1.com/data/companya/data200812241430」というURIを検索キーにして、データ801を含む書き換えURI管理表153を検索する。
検索の結果、「http://www.app1.com/data/companya/data200812241430」というURIが、1行目のエントリの「http://www.app1.com/data*」という「書き換え対象URI」列の文字列パターンとマッチすることが判明する。よって、ステップS101でリクエスト先変換部152は、書き換え先のURIのパターンとして、1行目の「http://data.mycompany.com/yamada/app1/data」というパターンを得る。
なお、第1実施形態では、前方一致検索が行われる。しかし、実施形態によっては、前方一致検索の代わりに後方一致検索、最長一致検索または最短一致検索などの方針にしたがってリクエスト先変換部152が検索を実行してもよい。
以上のように、ステップS101は、第1のネットワーク(すなわち利用者の社内ネットワーク110)内のコンピュータ(具体的には中継サーバ130)が図10のデータ801のような対応付け情報を参照するステップを含む。
また、中継サーバ130は、ステップS101の契機となる受信ステップも実行する。すなわち、中継サーバ130は、第1のネットワークとは別の第2のネットワーク内のサーバ(具体的にはSaaSアプリケーションサーバ180)に対する第1の要求を、第1のネットワーク内のクライアント(つまり利用者のブラウザ120)から受信する。
ステップS101はさらに、対応付け情報に基づき、第1の要求の対象である対象外部リソースを一意に識別する対象外部リソース判別情報と対応する対象内部リソース判別情報を検索するステップを含む。
続いてステップS102でリクエスト先変換部152は、書き換えURI管理表153に、対象外部リソースに該当するエントリがあるか否かを、ステップS101の検索の結果から判断する。対象外部リソースに該当するエントリが書き換えURI管理表153になければ処理はステップS103に移行し、対象外部リソースに該当するエントリが書き換えURI管理表153にあれば処理はステップS104に移行する。
ステップS103が実行されるのは、ステップS101の検索の結果、対象内部リソース判別情報が一意に特定されなかった場合である。上記のように、第1実施形態では、秘匿したい情報を含むリソースに関しては適宜書き換えURI管理表153にエントリが登録済みであると仮定されている。よって、換言すれば、ステップS103が実行されるのは、利用者の社内ネットワーク110の外部のSaaSアプリケーションサーバ180に送信しても問題ない情報しか含まないリソースに関して、利用者のブラウザ120がリクエストを発行した場合である。
したがって、ステップS103でリクエスト先変換部152は、社内システムサーバ160との連携が不要であると判断し、リクエスト受付部151から受け取ったリクエストをページ内容送受信部154に出力する。ページ内容送受信部154は、リクエスト先変換部152の判断にしたがい、リクエスト先変換部152から受け取ったリクエストをそのまま、本来の送信先であるSaaSアプリケーションサーバ180に送信する。
ページ内容送受信部154から送信されたリクエストは、SaaSアプリケーションサーバ180のリクエスト受付部181で受信される。SaaSアプリケーションサーバ180は、リクエストの内容に応じて、例えばアプリケーションデータ183の更新などの処理を行い、処理結果を含むリプライ(すなわちHTTPレスポンス)をページ内容送信部182から中継サーバ130へと送信する。
なお、ページ内容送受信部154は、ステップS103でSaaSアプリケーションサーバ180からのリプライの受信を待っている。ページ内容送受信部154は、SaaSアプリケーションサーバ180からリプライを受信すると、受信したリプライをそのまま、ページ内容送信部155を介して利用者のブラウザ120に返す。そして、図9の処理は終了する。
このように、ステップS103は、利用者のブラウザ120からの第1の要求を、SaaSアプリケーションサーバ180に送信するステップを含む。また、ステップS103は、第1の要求に対して得られるSaaSアプリケーションサーバ180の応答を、クライアントである利用者のブラウザ120に送信するステップを含む。
他方、ステップS101の検索の結果、対象内部リソース判別情報が特定された場合は、ステップS104が実行される。換言すれば、利用者のブラウザ120からのリクエストが、秘匿したい情報を含むリソースに関する場合は、ステップS104が実行される。ステップS104でリクエスト先変換部152は、書き換え先のURIパターンを展開し、書き換え先のURIを得る。
すなわち、図10を再び参照して具体例を説明すると、ステップS104の詳細は下記のごとくである。
例えば上記の例のように、ステップS101で図10の1行目に示したエントリが得られたとする。すると、ステップS104でリクエスト先変換部152は、「http://www.app1.com/data/companya/data200812241430」という元のURIのうち、書き換え対象URIの文字列パターンとマッチした「http://www.app1.com/data/」という部分を置換する。つまり、リクエスト先変換部152は、元のURIのうちの「http://www.app1.com/data/」という部分を、対応する書き換え先URIの文字列パターンである「http://data.mycompany.com/yamada/app1/data」に置換する。
その結果、リクエスト先変換部152は、対象内部リソースを一意に識別するURIを「http://data.mycompany.com/yamada/app1/data/companya/data200812241430」と特定する。このように、リクエスト先変換部152は、書き換えURI管理表153のデータ801を検索して文字列パターンマッチング処理を行うことで、対象外部リソースに対応する対象内部リソースのURIを一意に特定することができる。
また、リクエスト先変換部152は、特定した対象内部リソースのURIを、ステップS101の検索に用いた利用者IDおよび対象外部リソースのURIとともにページ内容送受信部154に通知する。通知された2つのURIは、後述の図11または図15の処理で利用される。
なお、図10の例には「利用者」列が含まれるが、実施形態によっては「利用者」列はなくてもよい。例えば、利用者IDを示す変数「$USER」を用いて、書き換え先URIが「http://data.mycompany.com/$USER/app1/data」のような文字列パターンで表されていてもよい。
この場合、リクエストを送信した利用者のブラウザ120が「yamada」という利用者IDの利用者により使われていることがセッション管理表142から判明したとする。すると、ステップS104ではリクエスト先変換部152が変数「$USER」に「yamada」という値を代入する。よって、例えば、対象外部リソースが「http://www.app1.com/data/companya/data200812241430」というURIで識別される場合、ステップS104においてリクエスト先変換部152は、上記の例と同様に、対象内部リソースを一意に識別するURIを特定する。すなわち、「利用者」列がない実施形態においても、ステップS104でリクエスト先変換部152は、対象内部リソースのURIとして「http://data.mycompany.com/yamada/app1/data/companya/data200812241430」を取得することができる。
このように、ステップS104の文字列のパターンマッチングと置換の詳細は、実施形態に応じて適宜様々な方法を採用することができ、必要に応じて正規表現や変数が使われてもよい。
上記のようにしてステップS104が実行された後、次のステップS105でリクエスト先変換部152は、リクエストの種別(すなわちリクエストラインで指定されるメソッドの種別)を判定する。
本実施形態では、判定された種別がGETであれば、ステップS105に続いてステップS106のGET処理が実行されて図9の処理が終了する。GET処理の詳細は図11〜図14とともに後述する。
また、判定された種別がGET以外であれば、ステップS105に続いてステップS107のPUT/POST/DELETE処理が実行されて図9の処理が終了する。PUT/POST/DELETE処理の詳細は図15〜図16とともに後述する。
図11は、第1実施形態によるGET処理のフローチャートである。GET処理は、利用者のブラウザ120から送信されたリクエストにおいて、リソースを参照するためのGETメソッドが指定されている場合に実行される。よって、当然ながらリクエストのメッセージボディにはリソースの内容は含まれていない
ステップS201でリクエスト先変換部152は、リクエスト受付部151から受け取ったリクエストをページ内容送受信部154に出力する。そして、ページ内容送受信部154は、書き換える前のURIすなわち対象外部リソースを識別する元のURIに対して、リクエスト先変換部152から受け取ったリクエストを送信する。つまり、ステップS201は、利用者のブラウザ120からの第1の要求が、対象外部リソースの内容を指示する要求ペイロード情報を含まないときに、第1の要求をSaaSアプリケーションサーバ180に送信するステップの具体例である。
送信されたリクエストはSaaSアプリケーションサーバ180のリクエスト受付部181で受信される。そして、アプリケーションデータ183のうち要求された対象外部リソースのデータが読み出される。ページ内容送信部182は、読み出されたデータと、「OK」などの処理結果などを含むリプライ(すなわちHTTPレスポンス)を中継サーバ130に送信する。
ページ内容送受信部154はステップS201でSaaSアプリケーションサーバ180からのリプライの受信を待っており、ページ内容送受信部154がリプライを得ると処理はステップS202に移行する。
ステップS202でページ内容送受信部154は、リクエストが成功したか否かを判断する。すなわち、ページ内容送受信部154は、ステップS201で受信したHTTPレスポンスのレスポンスラインに含まれるステータスコードから、ステップS201で送信したリクエストが成功して正常に処理されたか否かを判断する。リクエストが成功した場合、処理はステップS203に移行し、リクエストが失敗した場合、処理はステップS206に移行する。
ステップS203で、ページ内容送受信部154は、利用者ID、書き換え前のURIおよびリプライの内容を互いに対応付けてダミーデータ保持部156に格納する。ここで、利用者のブラウザ120からの第1の要求に対するSaaSアプリケーションサーバ180からの応答に含まれており、対象外部リソースの内容を示す情報を、「外部応答ペイロード情報」ということにする。ステップS203は、外部応答ペイロード情報を、対象外部リソース判別情報に対応するダミー情報として記憶するステップの具体例である。
なお、ここで「利用者ID」と「書き換え前のURI」とは、ページ内容送受信部154がS201で受信したリプライに対応する元のリクエストに関して、図9のステップS101でリクエスト先変換部152が検索キーとして用いたものを指す。また、「リプライの内容」とは、リプライのペイロードであり、換言すれば、HTTPレスポンスのメッセージボディに指定された、対象外部リソースの内容である。
ここで、図12を参照して、ステップS203の具体例について説明する。図12は、第1実施形態においてダミーデータ保持部が保持するデータの例を説明する図である。
第1実施形態におけるダミーデータ保持部156には、図12に示すような表形式でデータ802が格納されている。図12の表には、利用者IDを示す「利用者」列と、利用者のブラウザ120から送信される元のリクエストで指定される対象外部リソースを一意に識別するURIを示す「書き換え元URI」列と、ダミーデータを示す「内容」列がある。
例えば、1行目のエントリでは、「yamada」という利用者IDと、「http://www.app1.com/data/companya/data200812241430」というURIと、XML形式のダミーデータが対応付けられている。このダミーデータはルート要素として「userdata」という要素を持ち、「userdata」要素は、2つの子要素、すなわち「name」要素と「address」要素を持つ。「name」要素の内容は「名前を入力してください」というテキストであり、「address」要素の内容は「住所を入力してください」というテキストである。
また、2行目のエントリでは、「tanaka」という利用者IDと、「http://www.app2.com/schedule/tanaka/20090110」というURIと、XML形式のダミーデータが対応付けられている。このダミーデータは「schedule」という要素をルート要素として持ち、「schedule」要素の内容は空テキストである。
例えば1行目のエントリは、次のようにして作られる。
まず、「yamada」という利用者IDを持つ利用者の操作にしたがって、利用者のブラウザ120から、「http://www.app1.com/data/companya/data200812241430」というURIで識別される外部リソースを参照するリクエストが送信されたとする。そして、図9のステップS101、S102、S104およびS105が実行され、図11のステップS201でリプライが得られたとする。得られたリプライのメッセージボディには、図12に示すような、「userdata」要素をルート要素として持つXMLデータが含まれる。したがって、ステップS203においてページ内容送受信部154は、1行目のエントリを作成してダミーデータ保持部156内に格納する。
なお、後に再び「yamada」という利用者IDを持つ利用者の操作にしたがって、利用者のブラウザ120が、「http://www.app1.com/data/companya/data200812241430」というURIで識別される外部リソースを参照するリクエストを送信するかもしれない。その場合、ステップS203でページ内容送受信部154は、ダミーデータ保持部156に新たなエントリを作成する代わりに、1行目のエントリのうち「内容」列のみを更新する。
ここで図11の説明に戻ると、ステップS203の実行後、ステップS204でページ内容送受信部154は、書き換え後のURI(すなわち図9のステップS104でリクエスト先変換部152から通知されたURI)に対してリクエストを送信する。ステップS204は、対象内部リソース判別情報により識別される対象内部リソースの参照を要求する参照要求を発行するステップの一例である。
例えば、利用者のブラウザ120からの元のリクエストが参照を要求している対象外部リソースのURIが「http://www.app1.com/data/companya/data200812241430」であるとする。この場合、図9のステップS104に関して図10を参照して説明したように、書き換え後のURIは「http://data.mycompany.com/yamada/app1/data/companya/data200812241430」であり、社内システムサーバ160上の内部リソースを識別するURIである。したがって、この場合、ページ内容送受信部154はステップS204において、「http://data.mycompany.com/yamada/app1/data/companya/data200812241430」の参照を要求するリクエストを社内システムサーバ160に送信する。
送信されたリクエストは、社内システムサーバ160のリクエスト受付部161で受信される。そして、アプリケーションデータ163のうち要求された対象内部リソースのデータが読み出される。ページ内容送信部162は、読み出されたデータと、「OK」などの処理結果などを含むリプライ(すなわちHTTPレスポンス)を中継サーバ130に送信する。
上記のステップS204の動作について、図13を参照してさらに具体的に説明する。図13は、第1実施形態において社内システムサーバに格納されるデータの例を説明する図である。
図1に関して説明したように、秘匿したい内部リソースであるアプリケーションデータ163は、例えば社内システムサーバ160が備えるHDDなどの記憶装置に格納される。
具体的には、図13に示すように、データ803は、社内システムサーバ160内の「yamada/app1/data/companya/data200812241430」というローカルパスで示される場所に格納されている。また、データ804は、社内システムサーバ160内の「tanaka/app2/data/tanaka/20090110」というローカルパスで示される場所に格納されている。より正確には、図13に示したローカルパスは、HTTPサーバとして機能する社内システムサーバ160におけるドキュメントルートよりも下層のパスである。
また、社内システムサーバ160は、例えば公知のファイルシステムなどを利用して、個々のリソースの所有者を管理してもよい。具体的には、社内システムサーバ160は、データ803に「yamada」という利用者IDを対応付けるとともに、データ804に「tanaka」という利用者IDを対応付け、リソースの所有者に応じたアクセス制御を行ってもよい。
続いて、図13と図10および図12の関係について説明する。
「http://www.app1.com/data/companya/data200812241430」というURIに対応して図10のデータ801から図9のステップS104で得られるURIは、上記のとおり「http://data.mycompany.com/yamada/app1/data/companya/data200812241430」である。同様に、「http://www.app2.com/schedule/tanaka/20090110」というURIに対応してステップS104で得られるURIは、図10より、「http://data.mycompany.com/tanaka/app2/data/tanaka/20090110」である。
そして図12によれば、上記の「http://www.app1.com/data/companya/data200812241430」というURIに対応するダミーデータは、「userdata」要素をルート要素とするXMLデータであり、図13のデータ803と文書の木構造が等しい。同様に、図12によれば、上記の「http://www.app2.com/schedule/tanaka/20090110」というURIに対応するダミーデータは、「schedule」要素をルート要素とするXMLデータであり、図13のデータ804と文書の木構造が等しい。
図13のデータ803では、「name」要素の内容が「山田太郎」というテキストであり、「address」要素の内容が「川崎市中原区」というテキストである。よって、データ803と図12の1行目のエントリに含まれるダミーデータとは、異なる内容を含んでいるが、文書の木構造は同じである。また、図13のデータ804では、「schedule」要素の内容が「10:30 新プロジェクト打ち合わせ」というテキストである。よって、データ804と図12の2行目のエントリに含まれるダミーデータとは、異なる内容を含んでいるが、文書の木構造は同じである。
なお、上記のように内部リソースのデータとダミーデータとが同じ文書構造を持つ場合の前提については、PUT/POST/DELETE処理について説明した後に述べる。
ここで図11の説明に戻る。ページ内容送受信部154はステップS204で社内システムサーバ160からのリプライの受信を待っており、ページ内容送受信部154がリプライを得ると処理はステップS205に移行する。
ステップS205でページ内容送受信部154は、対象内部リソースのデータが見つかったか否かを判断する。例えば、「OK」を示すステータスコード「200」が、ステップS204で得たリプライに含まれていれば、ページ内容送受信部154は「対象内部リソースのデータが見つかった」と判断し、処理はステップS206に移行する。逆に、ページ内容送受信部154が「対象内部リソースのデータが見つからなかった」と判断した場合は、処理はステップS207に移行する。
ステップS206は、ステップS202で「失敗した」と判断された後またはステップS205で「対象内部リソースのデータが見つかった」と判断された後に実行される。ステップS206では、ページ内容送受信部154が、直前に返されたリプライをそのまま、ページ内容送信部155を介して、クライアントである利用者のブラウザ120に返す。
すなわち、ステップS202に続いてステップS206が実行される場合、ページ内容送受信部154は、ステップS201でSaaSアプリケーションサーバ180から得たリプライを、ページ内容送信部155を介して利用者のブラウザ120に転送する。つまり、ページ内容送信部155は、ページ内容送受信部154からの出力にしたがい、対象外部リソースの参照に失敗したことを示すHTTPレスポンスを利用者のブラウザ120に送信する。
また、ステップS205に続いてステップS206が実行される場合、ページ内容送受信部154は、ステップS204で社内システムサーバ160から得たリプライを、ページ内容送信部155を介して利用者のブラウザ120に転送する。つまり、ページ内容送信部155は、ページ内容送受信部154からの出力にしたがい、対象内部リソースの内容(例えば図13のデータ803)をメッセージボディに含むHTTPレスポンスを利用者のブラウザ120に送信する。この場合、ステップS206は、ステップS204で発行した参照要求に対して得られる内部応答を受信し、対象内部リソースの内容を示す情報として内部応答に含まれる内部応答ペイロード情報を、クライアントである利用者のブラウザ120に送信するステップの例である。
ステップS206の処理の実行後、図11の処理も終了する。
また、ステップS207では、ページ内容送受信部154が、ダミーデータ保持部156から現在の利用者IDと書き換え前のURIを検索キーにして、対応するダミーデータを検索する。そして、ページ内容送受信部154は、検索の結果として得られたダミーデータを内容として含めたリプライを、ページ内容送信部155を介して、クライアントである利用者のブラウザ120に返す。
なお、ここで「現在の利用者ID」と「書き換え前のURI」とは、ページ内容送受信部154がS201で受信したリプライに対応する元のリクエストに関して、図9のステップS101でリクエスト先変換部152が検索キーとして用いたものを指す。
例えば、現在の利用者IDと書き換え前のURIがそれぞれ「yamada」と「http://www.app1.com/data/companya/data200812241430」であるとする。この場合、ステップS207では、図12の1行目に示した「userdata」要素をルート要素として持つXML形式のダミーデータが、検索の結果として得られる。よって、ページ内容送受信部154は、得られたダミーデータをメッセージボディに含むHTTPレスポンスを、ページ内容送信部155を介して利用者のブラウザ120に送信する。以上により、図11の処理が終了する。
なお、通常はステップS205で「対象内部リソースのデータが見つかった」と判断され、ステップS206が実行される。ステップS207が実行されるのは、SaaSアプリケーションサーバ180が、例えば次のように設計されているような例外的な場合である。
ある種のSaaSアプリケーションサーバ180は、存在しないURIに対する参照が要求されたとき、当該URIがSaaSアプリケーションサーバ180内でのURI空間の管理方針に合致していれば、次のように動作するよう設計されているかもしれない。つまり、SaaSアプリケーションサーバ180は、デフォルトで決められた内容のリソースを新たに作成し、要求されたURIが表す場所に格納し、新たに作成したリソースがあたかも既に存在していたかのようにふるまってもよい。その場合、SaaSアプリケーションサーバ180は、新たに作成したリソースの内容(すなわちデフォルトで決められた内容)をメッセージボディに含めてHTTPレスポンスを中継サーバ130に返す。
仮にSaaSアプリケーションサーバ180が上記のように設計されている場合、新規にSaaSアプリケーションサーバ180上に作成された外部リソースに対応する内部リソースは、当然、社内システムサーバ160上には存在しない。すると、ステップS202では「リクエストが成功した」と判断される一方で、ステップS205では「対象内部リソースのデータが見つからなかった」と判断されるので、ステップS207が実行される。
続いて、図9と図11の処理についてさらに図14を参照して説明する。図14は、第1実施形態によるGET処理の動作シーケンス図である。すなわち、図14には図1の利用者のブラウザ120、中継機能部150、ダミーデータ保持部156、社内システムサーバ160およびSaaSアプリケーションサーバ180の列がある。なお、図14では図示の便宜上、中継機能部150内のダミーデータ保持部156を中継機能部150とは分けて示してある。
(1)に示すように、利用者のブラウザ120からXMLHttpRequestオブジェクトによりSaaSアプリケーションサーバ180上の外部リソースの参照が要求され、中継機能部150でHTTPリクエストが受信される。
すると、図9の処理が開始される。そして、対象外部リソースのURIが書き換えURI管理表153に登録されていれば、図9のステップS102からステップS104へと処理が進む。リソースの参照を要求するHTTPリクエストで指定されるメソッドは、図8に関して説明したようにGETメソッドである。そこで、図9のステップS106すなわち図11のGET処理が実行される。
具体的には、図14の(2)に示すように、図11のステップS201で、中継機能部150からSaaSアプリケーションサーバ180に対して、HTTPでデータ(つまり対象外部リソースのデータ)の参照が要求される。
そして、ステップS201において、さらに(3)に示すように、アプリケーション提供元であるSaaSアプリケーションサーバ180から、要求されたデータが中継機能部150に送信される。なお、図14では、(3)で送信されるデータが「初期状態データ」と表現されているが、その理由は後述する。初期状態データは、図12に示したようなダミーデータと同じ内容である。
すると、上記(3)で正常なリプライが得られたので、処理はステップS202からステップS203へと進む。すなわち、(4)に示すように、中継機能部150は、書き換え前のURI(つまり対象外部リソースのURI)と初期状態データをダミーデータ保持部156に格納する。
続いてステップS204が実行され、(5)に示すように、中継機能部150がHTTPで書き換え先URIを指定してデータの参照を要求する。すなわち、中継機能部150は、社内システムサーバ160上の対象内部リソースの参照を要求する。
すると、ステップS204において、さらに(6)に示すように、社内システムサーバ160は、社内システムサーバ160内に保存してあるデータを中継機能部150に送信する。
そして、上記(6)で正常に対象内部リソースのデータが得られると、処理はステップS206に進む。すると、(7)に示すように、中継機能部150は、社内システムサーバ160に保存されていたデータを利用者のブラウザ120に送信する。
あるいは、上記(6)で社内システムサーバ160上に対象内部リソースが存在しなかった場合、すなわちデータがない場合は、処理はステップS207に進む。すると、(7)では、中継機能部150がダミーデータ保持部156からダミーデータを読み出し、ダミーデータが利用者のブラウザ120に送信される。
以上から、利用者のブラウザ120は、単に「(1)の要求に対して(7)のリプライが得られた」と認識する。つまり、利用者のブラウザ120は、得られたリプライのペイロードデータ(具体的にはHTTPレスポンスのメッセージボディ)が外部リソースのデータであるか内部リソースのデータであるかの違いを認識せずに、(7)以降の処理を続行することができる。そして、利用者のブラウザ120が(1)で発行するHTTPリクエストでは、SaaSアプリケーションサーバ180上のURIが指定されているので、SOPも守られている。
また、SaaSアプリケーションサーバ180は、(2)の要求を受け付け、(3)でリプライを送信するので、「対象外部リソースに対して参照が要求された」という事実および「要求は成功裡に処理された」という事実を認識することができる。したがって、認識した結果に基づいてSaaSアプリケーションサーバ180は適切なデータ管理を行うことが可能である。
例えば、SaaSアプリケーションサーバ180は、「アプリケーションデータ183のうちで一定期間以上アクセスされていないデータにマークをつける」などのデータ管理を行うよう設計されているかもしれない。その場合も、第1実施形態によれば、SaaSアプリケーションサーバ180は適切にデータ管理を行うことができ、不整合は生じない。
続いて、図9のステップS107で実行されるPUT/POST/DELETE処理の詳細について説明する。
図15は、第1実施形態によるPUT/POST/DELETE処理のフローチャートである。
なお、HTTPリクエストで指定されるメソッドのうち、PUT、POSTおよびDELETEは副作用を持つという点で共通しているので、図15には「PUT/POST/DELETE処理」としてまとめて図示した。もちろん、これら3種のメソッドの違いに応じて図15の各ステップの詳細は一部異なるので、以下ではまず各ステップの概要を説明し、メソッドごとの具体的な相違点については後から説明する。
ステップS301でページ内容送受信部154は、ダミーデータ保持部156内で現在の利用者IDおよび書き換え前のURIに対応するダミーデータを検索する。図11のステップS203に関して説明したように、ダミーデータは、リソースの参照を要求するため過去に送信されたリクエストに対するリプライに含まれていたデータである。
なお、ステップS301における「現在の利用者ID」および「書き換え前のURI」は、図11のステップS207と同様の意味であり、図9のステップS104で既にリクエスト先変換部152から通知されている。
次に、ステップS302でページ内容送受信部154は、検索条件に合致するダミーデータがダミーデータ保持部156にあったか否かを判断する。検索条件に合致するダミーデータがダミーデータ保持部156にあれば処理はステップS303に移行し、なければ処理はステップS304に移行する。
ステップS303でページ内容送受信部154は、検索の結果得られたダミーデータを内容として書き換え前のURIにリクエストを送信し、SaaSアプリケーションサーバ180からのリプライの受信を待つ。リプライの受信後、処理はステップS305に移行する。ただし、DELETEメソッドが指定されたリクエストに関して図15の処理が行われる場合は、メッセージボディは不要なので、ページ内容送受信部154はダミーデータをリクエストに含める必要はない。
また、ステップS304でページ内容送受信部154は、「空のデータ」を内容として書き換え前のURIにリクエストを送信し、SaaSアプリケーションサーバ180からのリプライの受信を待つ。リプライの受信後、処理はステップS305に移行する。ただし、DELETEメソッドが指定されたリクエストに関して図15の処理が行われる場合は、ステップS303と同様にメッセージボディは不要である。
なお、ここで「空のデータ」とは、「実質的な内容が空(ブランク)であるデータ」という意味である。例えば、利用者のブラウザ120からの元のリクエストのメッセージボディで指定されているデータがXMLデータであれば、「空のデータ」は、元のXMLデータのタグのみ残して、属性と各要素の内容が削除されたデータでもよい。また、利用者のブラウザ120からの元のリクエストのメッセージボディで指定されているデータがプレインテキストデータであれば、「空のデータ」は、空白文字のみを含むデータでもよい。
ページ内容送受信部154は、ステップS304において例えば上記のような「空のデータ」を生成して、書き換え前のURIに対するリクエストのメッセージボディに含めることができる。
なお、ステップS303とS304は、対象内部リソース判別情報により識別される対象内部リソースに対して、利用者のブラウザ120からの第1の要求により要求される操作と同じ種類の操作を要求する第2の要求を発行するステップの具体例である。
ステップS305では、ページ内容送受信部154は、書き換え後のURIに対して、利用者のブラウザ120からの元のリクエストに含まれている元のデータを内容としてリクエストを送信する。そして、ページ内容送受信部154は、社内システムサーバ160からのリプライの受信を待つ。ただし、DELETEメソッドが指定されたリクエストに関して図15の処理が行われる場合は、ステップS303やS304と同様にメッセージボディは不要である。リプライの受信後、処理はステップS306に移行する。
ステップS306でページ内容送受信部154は、ステップS303またはS304で得たリプライを、ページ内容送信部155を介して、クライアントである利用者のブラウザ120に返す。つまり、ステップS306は、クライアントである利用者のブラウザ120からの第1の要求が対象外部リソースに副作用を与える要求であるときの、第1の要求に対するサーバからの応答の内容をクライアントに送信するステップの例である。ステップS306の実行後、図15の処理が終了する。
以上、PUT/POST/DELETE処理の概要について説明したので、続いて、メソッドごとの相違点を中心にPUT/POST/DELETE処理の詳細を説明する。
(A)PUTメソッドの場合
例えば、「yamada」という利用者IDの利用者の操作にしたがって、利用者のブラウザ120が「http://www.app1.com/data/companya/data200812241430」というURIに対してPUTメソッドを指定したリクエストを送信したとする。すると、利用者のブラウザ120からのリクエストの送信を契機として図9の処理が開始され、図9のステップS107で図15の処理が呼び出される。
この場合、図15のステップS301の検索の結果として、図12の1行目に示した、「userdata」要素をルート要素として持つXML形式のダミーデータが得られる。したがって、ステップS303でページ内容送受信部154は、次のようなHTTPリクエストをSaaSアプリケーションサーバ180に送信する。
・リクエストラインには、PUTメソッドと「http://www.app1.com/data/companya/data200812241430」という書き換え前のURIが指定されている。なお、ここでは説明の便宜上、絶対URIを示したが、当該URIに対応する相対パスなどでもよいことは当然であり、本明細書中の他の箇所においても同様である。
・メッセージボディには、ステップS301で得られたダミーデータが含まれる。
このように、(A)の場合、利用者のブラウザ120からの第1の要求は、対象外部リソースの内容を指示するペイロード情報を含む。よって、(A)の場合、ステップS302は、外部リソース判別情報とダミー情報とを対応付ける対応付け情報(具体的には例えば図12のデータ802)を参照し、対象外部リソース判別情報に対応するダミー情報を特定するステップの一例である。また、(A)の場合、ステップS303は、第1の要求に含まれるペイロード情報を対象外部リソース判別情報に対応するダミー情報により置換して、置換後の第1の要求をサーバに送信するステップの例となっている。
また、何らかの理由でステップS301においてダミーデータが見つからなかった場合は、ステップS304でページ内容送受信部154は、次のようなHTTPリクエストをSaaSアプリケーションサーバ180に送信する。
・リクエストラインには、PUTメソッドと、「http://www.app1.com/data/companya/data200812241430」という書き換え前のURIが指定されている。
・メッセージボディには、空のデータが含まれる。
また、既に図9のステップS104で書き換え後の「http://data.mycompany.com/yamada/app1/data/companya/data200812241430」というURIがリクエスト先変換部152から通知されている。したがって、ステップS305でページ内容送受信部154は、次のようなHTTPリクエストを社内システムサーバ160に送信する。
・リクエストラインには、PUTメソッドと、「http://data.mycompany.com/yamada/app1/data/companya/data200812241430」というURIが指定されている。
・メッセージボディには、図9の処理の契機となった利用者のブラウザ120からの元のリクエストのメッセージボディと同じ内容が含まれる。
そして、ステップS306でページ内容送受信部154は、ステップS303またはS304でSaaSアプリケーションサーバ180から得られたリプライを、ページ内容送信部155を介して利用者のブラウザ120に返す。リプライには、例えば、SaaSアプリケーションサーバ180において更新が成功したことを示す「OK」などのステータスが含まれる。
(B)DELETEメソッドの場合
例えば、「yamada」という利用者IDの利用者の操作にしたがって、利用者のブラウザ120が「http://www.app1.com/data/companya/data200812241430」というURIに対してDELETEメソッドを指定したリクエストを送信したとする。すると、利用者のブラウザ120からのリクエストの送信を契機として図9の処理が開始され、図9のステップS107で図15の処理が呼び出される。
この場合も、通常は上記(A)と同様にダミーデータが見つかるが、エラーなど何らかの理由で、ダミーデータが見つからないこともありうる。いずれにせよ、(B)の場合、ステップS303またはS304でページ内容送受信部154は、次のようなHTTPリクエストをSaaSアプリケーションサーバ180に送信する。
・リクエストラインには、DELETEメソッドと、「http://www.app1.com/data/companya/data200812241430」という書き換え前のURIが指定されている。
つまり、(B)の場合、利用者のブラウザ120からの第1の要求は、対象外部リソースの内容を指示する要求ペイロード情報を含まない。したがって、(B)の場合は、ステップS303とS304も、第1の要求をサーバに送信するステップの具体例となっている。
また、(A)と同様に既に図9のステップS104で書き換え後のURIは通知されているので、ステップS305でページ内容送受信部154は、次のようなHTTPリクエストを社内システムサーバ160に送信する。
・リクエストラインには、DELETEメソッドと、「http://data.mycompany.com/yamada/app1/data/companya/data200812241430」というURIが指定されている。
そして、ステップS306でページ内容送受信部154は、ステップS303またはS304でSaaSアプリケーションサーバ180から得られたリプライを、ページ内容送信部155を介して利用者のブラウザ120に返す。リプライには、例えば、SaaSアプリケーションサーバ180において削除が成功したことを示す「OK」などのステータスが含まれる。
なお、上記のように、(B)の場合は、ステップS302の判断結果によらず同じリクエストがSaaSアプリケーションサーバ180に送信される。よって、ステップS301とS302とS304が省略されて、ステップS303とS305とS306のみが実行されてもよい。しかし、例えば、ダミーデータの有無に応じて中継機能部150がエラー処理などを適宜行うことができるようにするため、(B)の場合にも図15の各ステップが省略されずに行われてもよい。
(C)POSTメソッドの場合
利用者のブラウザ120は、SaaSアプリケーションサーバ180上に新規に外部リソースを作成することを要求するとき、POSTメソッドを指定したリクエストを送信する。図8に関して説明したように、POSTメソッドを指定したリクエストにおけるリクエストURIは、リソースを作成するための特別なリソースのURIである。
例えば、SaaSアプリケーションサーバ180における上記の特別なリソースのURIが「http://www.app1.com/data/post」であるとする。すると、利用者のブラウザ120が送信するリクエストは下記のようなものである。
・リクエストラインには、POSTメソッドと、「http://www.app1.com/data/post」というURIが指定されている。
・メッセージボディには、利用者の操作にしたがって利用者のブラウザ120を介して内容が編集されたデータ(例えばXMLデータやプレインテキストデータ)が含まれる。
また、本発明の各実施形態において、社内システムサーバ160も、POSTメソッドが指定されたリクエストに応じて新規リソースを社内システムサーバ160上に作成する機能を提供する。例えば、社内システムサーバ160において、新規リソースを作成するための特別なリソースのURIが「http://data.mycompany.com/post」であるとする。
また、書き換えURI管理表153には、図10のデータ801に加えて、さらに、各利用者IDについてそれぞれ次のようなエントリが含まれている。
・書き換え対象URIとして「http://www.app1.com/data/post」が指定されている。
・書き換え先URIとして「http://data.mycompany.com/post」が指定されている。
よって、利用者のブラウザ120がPOSTメソッドを指定したリクエストを送信すると、図9のステップS107から図15の処理が呼び出される。すると、ページ内容送受信部154はステップS301の検索を実行する。
ところが、第1実施形態においては、ダミーデータ保持部156にエントリが追加されるのは、図11のステップS203においてである。つまり、第1実施形態では、既存の外部リソースに対する参照が要求されることにより、ダミーデータ保持部156にエントリが追加される。また、リソースを作成するための特別なリソースに対しては、通常、GETメソッドが指定されることはない。
したがって、ステップS301の検索の結果、ダミーデータは得られず、処理はステップS304に移行する。ステップS304でページ内容送受信部154は、SaaSアプリケーションサーバ180に対して、下記のようなリクエストを送信する。
・リクエストラインには、POSTメソッドと、「http://www.app1.com/data/post」という書き換え前のURIが指定されている。
・メッセージボディには、「空のデータ」が含まれる。
SaaSアプリケーションサーバ180がこのリクエストを処理すると、SaaSアプリケーションサーバ180上に新規にリソースが作成され、例えば「http://www.app1.com/data/companya/data200812241430」のようなURIが割り当てられる。SaaSアプリケーションサーバ180からのHTTPレスポンスは、上記の処理により割り当てられた新たなURIの通知を含む。
そして、次のステップS305でページ内容送受信部154は、社内システムサーバ160に対して、下記のようなリクエストを送信する。
・リクエストラインには、POSTメソッドと、「http://data.mycompany.com/post」という書き換え後のURIが指定されている。
・メッセージボディには、利用者のブラウザ120からの元のリクエストのメッセージボディの内容が含まれる。
社内システムサーバ160がこのリクエストを処理すると、社内システムサーバ160上に新規にリソースが作成され、例えば「http://data.mycompany.com/yamada/app1/data/companya/data200812241430」のようなURIが割り当てられる。社内システムサーバ160からのHTTPレスポンスは、上記の処理により割り当てられた新たなURIの通知を含む。
なお、ページ内容送受信部154は、ステップS304とS305でそれぞれ通知される新たなURIに基づいて、書き換えURI管理表153にエントリを追加してもよい。
そして、ステップS306でページ内容送受信部154は、ステップS304で通知されたSaaSアプリケーションサーバ180上の新たなURIを含むHTTPレスポンスを、ページ内容送信部155を介して、利用者のブラウザ120に送信する。
以上、(A)〜(C)の場合に分けて、図15の処理の具体例について説明した。続いて、再度メソッドによらない共通点に注目して、PUT/POST/DELETE処理について図16を参照して説明する。
図16は、第1実施形態によるPUT/POST/DELETE処理の動作シーケンス図である。図16の形式は図14と同じである。
(1)に示すように、利用者のブラウザ120からXMLHttpRequestオブジェクトによりSaaSアプリケーションサーバ180に対して、リソースの作成、更新または削除が要求される。すると、図9の処理が開始される。
利用者のブラウザ120からのリクエストに指定されているURIが書き換えURI管理表153に登録されていれば、図9のステップS102からステップS104へと処理が進む。また、リソースの作成、更新または削除が要求される場合は、処理はステップS105からS107へと進み、図15の処理が呼び出される。
すると、図16の(2)に示すように、図15のステップS301で、指定された書き換え前のURIに対応するダミーデータが検索される。ダミーデータが見つかれば、中継機能部150はダミーデータを取得することができる。
そして、(3)に示すように、ステップS303またはS304において、中継機能部150はHTTPによりSaaSアプリケーションサーバ180に対して、リソースの作成、更新または削除を要求する。また、上記のように、PUTメソッドまたはPOSTメソッドが指定される場合は、ダミーデータあるいは「空のデータ」がここで使われる。
ステップS303またはS304においては、さらに(4)に示すように、SaaSアプリケーションサーバ180から(3)の要求に対するリプライが中継機能部150に送信される。
すると、ステップS305で、(5)に示すように、中継機能部150から社内システムサーバ160に対して、リソースの作成、更新または削除が要求される。また、ステップS305ではさらに、(6)に示すように、社内システムサーバ160から中継機能部150に対してリプライが送信される。
そして、ステップS306で、(7)に示すように、中継機能部150から利用者のブラウザ120に、中継機能部150が(4)で受信したリプライが転送される。
以上から、利用者のブラウザ120は、単に「(1)の要求に対して(7)のリプライが得られた」と認識する。例えば、利用者のブラウザ120は、(1)においてリソースの作成を要求すると、SaaSアプリケーションサーバ180上の外部リソースの新規URIを(7)で認識することができる。あるいは、利用者のブラウザ120は、(1)においてリソースの更新または削除を要求すると、要求した操作がSaaSアプリケーションサーバ180において成功したか否かという結果を(7)で認識することができる。
そして、利用者のブラウザ120が(1)で発行するHTTPリクエストでは、SaaSアプリケーションサーバ180上のURIが指定されているので、SOPも守られている。
また、SaaSアプリケーションサーバ180は、(3)で要求を受け付け(4)でリプライを送信するので、「リソースの作成、更新または削除が要求された」という事実および「要求は成功裡に処理された」という事実を認識することができる。
したがって、認識した結果に基づいてSaaSアプリケーションサーバ180は適切なデータ管理を行うことが可能である。例えば、SaaSアプリケーションサーバ180は、上記の認識に基づいて、作成されたリソースの一覧情報を管理することもできるし、リソースの最終更新日時などの編集状態を管理することができる。
また、リソースの作成が要求された場合、SaaSアプリケーションサーバ180は新規URIを生成し、作成した新規リソースに新規URIを割り当て、新規URIは(7)で利用者のブラウザ120に通知される。それにより、新規に作成されたリソースに対する利用者のブラウザ120からの今後のアクセスが可能となる。
このように、ダミーデータを用いてSaaSアプリケーションサーバ180とも通信を行うことによって、個々のリソースのメタ情報のSaaSアプリケーションサーバ180内での管理と、リソース自体の内容(つまりペイロード)の秘匿が両立可能となる。
ところで、図13に関して説明したように、第1実施形態では、内部リソースのデータとダミーデータとが同じ文書構造を持っている。その理由を、具体例を挙げて以下に説明する。
例えば、SaaSアプリケーションサーバ180には、利用者登録のための1つ以上のリソース(以下便宜的に「利用者登録リソース」という)が存在することがある。
利用者登録リソースの1つは、例えば、利用者のブラウザ120を介して新規に登録をしようとする利用者が、所望の利用者IDとパスワードを入力するための入力画面を表すHTMLソースコードでもよい。また、上記の1つ以上の利用者登録リソースのURIは、どれも書き換えURI管理表153には登録されていないとする。
すると、入力された利用者IDとパスワードは中継機能部150を介してSaaSアプリケーションサーバ180へと中継される。
また、もう1つの利用者登録リソースは、例えば、SaaSアプリケーションサーバ180により実行されるプログラム(以下便宜的に「利用者登録プログラム」という)のコードを含んでいる。利用者登録プログラムは、例えばスクリプト言語で書かれていてもよい。
そして、利用者登録プログラムは、具体的には、SaaSアプリケーションサーバ180が受信した新規の利用者IDとパスワードに基づいて、アプリケーションの新規アカウントを作成するためのプログラムである。例えば、SaaSアプリケーションサーバ180は利用者登録プログラムを実行することにより、アカウント管理用のデータベースに新規アカウント用のエントリを追加する。
さらに、SaaSアプリケーションサーバ180は、利用者登録プログラムを実行することにより、利用者プロフィールを示すための新規リソース(以下便宜的に「プロフィールデータ」という)を作成してもよい。
例えば、新たに「yamada」という利用者IDのアカウント作成が利用者のブラウザ120により要求されたとする。すると、SaaSアプリケーションサーバ180は、利用者登録プログラムを実行することにより「http://www.app1.com/data/companya/data200812241430」という新たなURIに新たなプロフィールデータを作成する。
ここで作成されるプロフィールデータは、利用者登録プログラムがデフォルトとして規定した内容を持つ。例えば、作成されるプロフィールデータは、ルート要素が「userdata」要素で、「userdata」要素が「name」要素と「address」要素という2つの子要素を持つXMLデータである。そして、「name」要素の内容は、「名前を入力してください」というテキストであり、「address」要素の内容は「住所を入力してください」というテキストである。すなわち、図12の1行目に示したダミーデータと同じ内容のプロフィールデータが、例えばアカウントの作成時に作成される。
こうして作成されたプロフィールデータは、もちろん、アプリケーションデータ183の一部である。そして、SaaSアプリケーションサーバ180が提供するアプリケーションには、例えばプロフィールデータを更新するためのメニュー(以下便宜的に「更新メニュー」という)が含まれている。
更新メニューは、例えば下記のコードを含むウェブページを利用者のブラウザ120に送信する、SaaSアプリケーションサーバ180上のリソースにより実現される。
・XMLHttpRequestオブジェクトを利用して、現状のプロフィールデータを参照し、現状のプロフィールデータの内容を利用者のブラウザ120の画面に表示するためのJavaScriptソースコード。
・XML形式のプロフィールデータの内容を、利用者のブラウザ120の画面を介してローカルに編集するためのユーザインタフェイスを提供するためのJavaScriptソースコード。
・特定のボタン(以下便宜的に「更新ボタン」という)を利用者のブラウザ120に表示させるためのHTMLソースコード。
・ローカルに編集されたプロフィールデータを、更新ボタンの押下を契機として、XMLHttpRequestオブジェクトを利用し、SaaSアプリケーションサーバ180に送信するためのJavaScriptソースコード。具体的には、PUTメソッドと、読み出したプロフィールデータのURIとが、送信時には指定される。
したがって、「yamada」という利用者IDの利用者の操作にしたがって利用者のブラウザ120が更新メニューにアクセスすると、まず、図9の処理が行われ、図9のステップS106から図11の処理が呼び出される。その結果、アカウント作成時に作成されたプロフィールデータが利用者のブラウザ120に取得され、図12の1行目のエントリがダミーデータ保持部156に作成される。
利用者のブラウザ120は、JavaScriptで書かれたプログラムを実行することで、利用者の操作にしたがって、「name」要素と「address」要素の内容をローカルに編集する。そして、更新ボタンが押下されると、再び図9の処理が行われ、今度は図9のステップS107から図15の処理が呼び出される。その結果、SaaSアプリケーションサーバ180には、アカウント作成時と同じプロフィールデータ(すなわちダミーデータとして記憶されたのと同じ内容のデータ)が格納される一方で、社内システムサーバ160には、図13のデータ803が格納される。
上記のようないくつかの処理の結果、第1実施形態では、ダミーデータと内部リソースのデータが同じ形式なのである。
また、上記の処理の流れによれば、SaaSアプリケーションサーバ180に送信されるデータは、最初にSaaSアプリケーションサーバ180から読み出された、実際の氏名や住所が未入力の状態(つまり初期状態)のプロフィールデータである。図14において「初期状態データ」という用語を用いたのも、そのためである。以上の説明からも、ダミーデータ保持部156が保持するダミーデータが、利用者の社内ネットワーク110の外部に対して秘密にする必要のないデータであることは明らかである。
続いて、第2実施形態について説明する。第1実施形態と第2実施形態の違いは、図1の書き換えURI管理表153に格納される内容のみである。
第1実施形態では、SaaSアプリケーションサーバ180の提供するアプリケーションがRESTスタイルに則っていると仮定している。つまり、同じリソースに対して参照、更新および削除のように異なる操作が行われる場合にも、各HTTPリクエストにおいて同じURIが指定される、と第1実施形態では仮定している。
しかし、アプリケーションの中には、RESTスタイルにほぼ準じてはいるものの、完全にRESTスタイルに従っているわけではないものがある。具体的には、同じリソースに対して、操作の種類によって異なるURIを用いるアプリケーションが存在する。
すなわち、第2実施形態においてSaaSアプリケーションサーバ180が提供するアプリケーションは、1つのURIにより識別される1つのリソースが、操作の種類によって異なるURIを介してアクセスされるよう設計されている。例えば、SaaSアプリケーションサーバ180が提供するアプリケーションは、次のように設計されているかもしれない。
・ある外部リソースを参照するためのURIは「http://www.app1.com/data/load/companya/data200812241430」である。
・同じ外部リソースに対して、更新を要求するためのURIは「http://www.app1.com/data/save/companya/data200812241430」である。
このように設計されたアプリケーションに関しても、第2実施形態によれば、データの内容を外部のSaaSアプリケーションサーバ180には秘匿しつつ、アプリケーションが提供する機能を利用者のブラウザ120が享受することが可能である。具体的には、第2実施形態では、書き換えURI管理表153が例えば図17のように設定されるが、それ以外の点では第2実施形態は第1実施形態と同様である。
図17は、第2実施形態による書き換えURI管理表の例を示す図である。例えば、図17の書き換えURI管理表805は、「yamada」という利用者IDに対応する2つのエントリを含む。この2つのエントリは同じリソースに対応する。
図17のデータ805は、「http://data.mycompany.com/yamada/app1/data」という書き換え先URIに対して、「http://www.app1.com/data/load*」という書き換え対象URIを対応させるエントリを含む。データ805はさらに、上記と同じ「http://data.mycompany.com/yamada/app1/data」という書き換え先URIに対して、別の「http://www.app1.com/data/save*」という書き換え対象URIを対応させるエントリを含む。なお、第2実施形態においても、第1実施形態と同様に、「書き換え対象URI」と「書き換え先URI」は、例えば、URIの一部を含む文字列パターンである。
例えば、利用者のブラウザ120が、外部リソースの参照のために、「http://www.app1.com/data/load/companya/data200812241430」というURIとGETメソッドを指定したHTTPリクエストを送信したとする。すると、図17のデータ805に基づいて、図9のステップS104では第1実施形態と同様に「http://data.mycompany.com/yamada/app1/data/companya/data200812241430」というURIが得られる。そして、第1実施形態と同様に図11の処理が行われる。
また、利用者のブラウザ120が、外部リソースの更新のために、「http://www.app1.com/data/save/companya/data200812241430」というURIとPUTメソッドを指定したHTTPリクエストを送信したとする。すると、図17のデータ805に基づいて、図9のステップS104では第1実施形態と同様に「http://data.mycompany.com/yamada/app1/data/companya/data200812241430」というURIが得られる。そして、第1実施形態と同様に図15の処理が行われる。
よって、操作の種類により異なるURIを介してアクセスを受け付けるよう設計されたアプリケーションをSaaSアプリケーションサーバ180が提供する場合も、適切に書き換えURI管理表153が設定されていれば、第1実施形態と同様の効果が得られる。
続いて、「デフォルトダミーデータ」が導入される第3実施形態について説明する。
図18は、第3実施形態による書き換えURI管理表の例を示す図である。第1実施形態では図10のような3列の書き換えURI管理表153が利用されるが、第3実施形態では、図18のように「ダミーデータ初期値」列が追加された4列の書き換えURI管理表153が利用される。
図18に示した書き換えURI管理表153のデータ806の1行目のエントリにおいて、「利用者」列、「書き換え対象URI」列および「書き換え先URI」列の内容は、図10の1行目のエントリと同じである。よって説明は省略する。また、「ダミーデータ初期値」列には、ルート要素が「userdata」要素で、「userdata」要素が「name」要素と「address」要素という2つの子要素を持つXMLデータが格納されている。なお、図18において「name」要素の内容は、「名前を入力してください」というテキストであり、「address」要素の内容は「住所を入力してください」というテキストである。
そして、データ806の2行目のエントリにおいて、「利用者」列、「書き換え対象URI」列および「書き換え先URI」列の内容は、図10の3行目のエントリと同じである。よって説明は省略する。また、「ダミーデータ初期値」列には、ルート要素が「schedule」要素で、「schedule」要素は子要素を持たず、「schedule」要素の内容が空テキストであるXMLデータが格納されている。
第3実施形態は、「ある種のアプリケーションでは、処理対象のリソースの種類が、リソースのURIから決定可能である」という点に着目した実施形態である。具体的には、例えば以下のように、SaaSアプリケーションサーバ180上の外部リソースのURIから、外部リソースの形式が判明しているとする。
・「http://www.app1.com/data*」というパターンにマッチするURIで識別されるリソースは、ルート要素が「userdata」要素で、「userdata」要素が「name」要素と「address」要素という2つの子要素を持つXMLデータである。
・「http://www.app2.com/schedule*」というパターンにマッチするURIで識別されるリソースは、ルート要素が「schedule」要素で、「schedule」要素は子要素を持たないXMLデータである。
つまり、第3実施形態では、書き換え対象URIに応じて上記のように予め判明しているデータ形式を持ったデータが、デフォルトダミーデータとして「ダミーデータ初期値」列に予め格納される。なお、デフォルトダミーデータは、利用者の社内ネットワーク110の外部に送信されても問題のない内容のみを含むように作成されるものとする。
こうして予めデータの種類に応じて用意され、書き換えURI管理表153に予め格納されたデフォルトダミーデータは、図15のステップS304で使われる。つまり、ステップS304でページ内容送受信部154は、「空のデータ」を生成する代わりに、書き換えURI管理表153を参照してデフォルトダミーデータを取得する。
したがって、第3実施形態では、リソースの作成または更新のたびに「空のデータ」をページ内容送受信部154が生成する必要がない。また、第3実施形態においても、第1実施形態と同様に、SaaSアプリケーションサーバ180には情報の内容を秘匿しつつ、アプリケーションの機能を享受することが可能である。
続いて、第4実施形態について説明する。
ウェブアプリケーションを利用する組織(例えば企業)とアプリケーションの提供者の関係は、図2ではn対1の例を示したが、一般にはn対nである。よって、例えば、企業Aは、第1の提供者が提供する第1のウェブアプリケーションを利用するとともに、第2の提供者が提供する第2のウェブアプリケーションも利用するかもしれない。つまり、企業A内の利用者は、第1と第2のアプリケーションの双方を利用することがありうる。
そして、場合によっては、複数のアプリケーションが共通の機能を提供していることがある。例えば、利用者の氏名と住所を管理する機能や、スケジューラ機能(カレンダ機能とも呼ばれる)は多くのアプリケーションでサポートされている。
したがって、もし複数のアプリケーション間で一部のデータを共有することができれば、下記の2つの観点から好ましい。
第1に、利用者は複数のアプリケーションのそれぞれについて、同じ内容のデータの入力作業を繰り返す必要がない。つまり利用者の負担が軽くなる。
第2に、利用者の負担を抑制しつつ複数のアプリケーションの機能を有効活用することが可能となる。
例えば、第1と第2のアプリケーションの双方がスケジューラ機能を提供している場合、利用者の負担を軽減するという観点からは、利用者は、一方のアプリケーションでのみ、スケジューラ機能を使ってもよい。しかし、第1のアプリケーションは、スケジューラ機能とメーラ機能を連携させることで、より良いサービスを提供するかもしれない。同様に、第2のアプリケーションは、スケジューラ機能とグループウェア機能を連携させることで、より良いサービスを提供するかもしれない。
この場合、もし利用者が一方のアプリケーションでのみスケジューラ機能を利用すると、利用者は、第1と第2のアプリケーションの双方の機能を有効に利用しきれない可能性がある。それに対し、もし利用者が同じ入力を繰り返さずに同じデータを第1と第2のアプリケーションで共有することができるのであれば、利用者は、第1と第2のアプリケーションの双方の機能を有効に利用することが可能となる。
以上の2つの観点から、第4実施形態では、複数のアプリケーション間でデータを共有するための付加的な仕組みを、中継機能部150がさらに備えている。具体的には、第4実施形態では、書き換えURI管理表153に列が追加され、図11のステップS206でデータの変換が行われ、図15のステップS305でデータの逆変換が行われる。
なお、以下の説明において「変換」とは、社内システムサーバ160でのデータ形式(以下では「内部形式」という)から、SaaSアプリケーションサーバ180でのデータ形式(以下では「外部形式」という)への変換を示す。また、「逆変換」とは、外部形式から内部形式への変換を示す。
続いて、図19〜図22を参照して、書き換えURI管理表153と変換と逆変換の具体例を説明し、その後で、第4実施形態における処理の流れを説明する。
図19は、第4実施形態による書き換えURI管理表の例を示す図である。第4実施形態の書き換えURI管理表153は、図10に示した第1実施形態と同様の「利用者」列、「書き換え対象URI」列および「書き換え先URI」列を含み、さらに、「変換プログラム」列と「逆変換プログラム」列を含む。
図19のデータ807の1行目のエントリは、「yamada」という利用者IDと、「http://www.app1.com/data*」という文字列パターンと、「http://data.mycompany.com/yamada/app1/data」という文字列パターンを含む。
また、第4実施形態では、「http://www.app1.com/」というURIで識別される第1のSaaSアプリケーションサーバ(不図示)で使われる第1の外部形式が、内部形式として採用されている。そのため、1行目のエントリにおいて、変換プログラムと逆変換プログラムは「なし」と指定されている。
2行目のエントリは、「yamada」という利用者IDと、「http://www.app2.com/data*」という文字列パターンと、「http://data.mycompany.com/yamada/app1/data」という文字列パターンを含む。つまり、「http://www.app2.com/」というURIで識別される第2のSaaSアプリケーションサーバ(不図示)に関しても、1行目と同じ「http://data.mycompany.com/yamada/app1/data」という文字列パターンが指定されている。
また、第2のSaaSアプリケーションサーバで使われる第2の外部形式は、内部形式としても使われている第1の外部形式とは異なる。そこで、2行目のエントリでは、内部形式のデータを第2の外部形式に変換する変換プログラムと、第2の外部形式のデータを内部形式に逆変換する逆変換プログラムが指定されている。
具体的には、第4実施形態では、XSLT(eXtensible Stylesheet Language Transformations)文書とXSLTプロセッサによりデータの変換と逆変換が行われる。例えば、公知のソフトウェアとして実現されるXSLTプロセッサが、第4実施形態ではページ内容送受信部154に組み込まれている。
そこで、変換プログラムを記憶するための中継サーバ130内の所定のディレクトリに記憶されている「adrsconv-app2-internal.xsl」というファイル名のXSLT文書が2行目のエントリでは指定されている。同様に、逆変換プログラムを記憶するための中継サーバ130内の所定のディレクトリに記憶されている「adrsconv-internal-app2.xsl」というファイル名のXSLT文書が2行目のエントリでは指定されている。
図20は、第4実施形態で使われるデータ形式の一例を示す図である。以下では、上記の内部形式を兼ねる第1の外部形式が、第1実施形態に関して図13に示したデータ803の形式であるとし、上記の第2の外部形式が、図20に示す形式であるとする。
図20のデータ808は、利用者の氏名と住所を管理するためのデータの一例である。データ808は、子要素を持たない「entry」要素をルート要素とするXML形式のデータである。具体的には、「entry」要素は、「user」という属性値が指定された「type」属性と、「山田太郎」という氏名が属性値として指定された「name」属性と、「川崎市中原区」という住所が属性値として指定された「address」属性を有する。
内部形式でもある第1の外部形式による図13のデータ803と、第2の外部形式による図20のデータ808を比較すると、両者は、氏名と住所を管理するという目的は同じだが、データ形式において異なっている。
図21は、第4実施形態における変換プログラムの例を説明する図である。すなわち、上記の所定のディレクトリに記憶されている「adrsconv-app2-internal.xsl」というファイル名のXSLT文書の具体例を、図21は示している。
図21には、変換プログラム809(つまりXSLT文書)と、入力データ810と、出力データ811が示されている。
入力データ810は、図13のデータ803と同じXMLデータである。出力データ811は図21のデータ808と同じXMLデータである。変換プログラム809は、入力データ810を出力データ811に変換する方法を記載したXSLT文書である。
具体的には、変換プログラム809は、入力データ810の「userdata」要素を見つけて次の処理を行うようXSLTプロセッサに指示している。
・「type」属性と「name」属性と「address」属性を持つ「entry」要素を出力する。
・「type」属性の属性値には「user」と設定する。
・「name」属性の属性値には、入力データ810で見つけた「userdata」要素の子要素である「name」要素の内容を設定する。
・「address」属性の属性値には、入力データ810で見つけた「userdata」要素の子要素である「address」要素の内容を設定する。
以上のような変換プログラム809の指示にしたがって、XSLTプロセッサは入力データ810から出力データ811を生成する。
図22は、第4実施形態における逆変換プログラムの例を説明する図である。すなわち、上記の所定のディレクトリに記憶されている「adrsconv-internal-app2.xsl」というファイル名のXSLT文書の具体例を、図22は示している。
図22の入力データ813は、図21の出力データ811と同じXMLデータであり、図22の出力データ814は、図21の入力データ810と同じXMLデータである。図22の逆変換プログラム812は、入力データ813を出力データ814に変換する方法を記載したXSLT文書である。
具体的には、逆変換プログラム812は、入力データ813の「entry」要素を見つけて次の処理を行うようXSLTプロセッサに指示している。
・「name」要素と「address」要素を子要素に持つ「userdata」要素を出力する。
・「name」要素の内容として、入力データ813で見つけた「entry」要素の「name」属性の属性値を設定する。
・「address」要素の内容として、入力データ813で見つけた「entry」要素の「address」属性の属性値を設定する。
以上のような逆変換プログラム812の指示にしたがって、XSLTプロセッサは入力データ813から出力データ814を生成する。
以上、図19〜図22を参照して第4実施形態における書き換えURI管理表153のデータ807の例と、変換と逆変換の例について詳細に説明した。続いて、変換と逆変換を含む処理の流れについて説明する。
例えば、利用者のブラウザ120が第2のSaaSアプリケーションサーバに対して「http://www.app2.com/data/companya/data200812241430」というURIのリソースの参照を要求したとする。すると、第1実施形態と同様に図9の処理が行われる。具体的には、図19のデータ807に基づき、図9のステップS104で「http://data.mycompany.com/yamada/app1/data/companya/data200812241430」というURIが得られ、ステップS106から図11の処理が呼び出される。
第1実施形態と異なる処理が行われるのは、図11の処理がステップS201、S202、S203、S204、S205、S206の順で行われる場合である。この場合、ステップS204において、ページ内容送受信部154は、上記の「http://data.mycompany.com/yamada/app1/data/companya/data200812241430」という書き換え後のURIに対して対象内部リソースの参照を要求するリクエストを送信する。したがって、ステップS204で得られるリプライには、内部形式で表されたデータが含まれる。
例えば、ステップS204では図21の入力データ810が得られる。しかしながら、元のリクエストを送信した利用者のブラウザ120が現在利用しているのは、内部形式とは異なる第2の外部形式を採用した第2のSaaSアプリケーションサーバから提供されるアプリケーションである。そこで、ステップS204の後にステップS206が実行される場合は、ステップS206において、ページ内容送受信部154は図21の変換プログラム809による変換処理を行う。
例えば、ページ内容送受信部154は、ステップS204で得られた、内部形式で表された入力データ810を変換して、第2の外部形式で表された出力データ811を得る。そして、ページ内容送受信部154は、ページ内容送信部155を介して、第2の外部形式で表された出力データ811を利用者のブラウザ120に送信する。
また、利用者のブラウザ120が第2のSaaSアプリケーションサーバに対して「http://www.app2.com/data/companya/data200812241430」というURIのリソースの更新を要求したとする。すると、第1実施形態と同様に図9の処理が行われる。具体的には、図19のデータ807に基づき、図9のステップS104で「http://data.mycompany.com/yamada/app1/data/companya/data200812241430」というURIが得られ、ステップS107から図15の処理が呼び出される。
第1実施形態と異なる処理が行われるのはステップS305である。すなわち、利用者のブラウザ120からの元のリクエストに含まれているのは第2の外部形式で表されたデータである。他方、ステップS305でのリクエストの送信先である社内システムサーバ160では、内部形式が使われている。そこで、ステップS305においてページ内容送受信部154は、図22の逆変換プログラムによる逆変換処理を行う。
例えば、ページ内容送受信部154は、第2の外部形式で表された入力データ813を逆変換して、内部形式で表された出力データ814を得る。そして、ページ内容送受信部154は、社内システムサーバ160に対し、出力データ814を含みPUTメソッドを指定したリクエストを送信する。
また、利用者のブラウザ120が第2のSaaSアプリケーションサーバに対してリソースの作成を要求した場合も、同様に、ステップS305においてページ内容送受信部154は逆変換処理を行う。なお、利用者のブラウザ120が第2のSaaSアプリケーションサーバに対してリソースの削除を要求した場合の処理は、第1実施形態と同様である。
なお、上記の説明では、2つのアプリケーション間で氏名と住所のデータを共有する例を示したが、複数のアプリケーション間で共有されるデータ項目が完全に一致していない場合にも、第4実施形態は適用可能である。つまり、第4実施形態によれば、複数のアプリケーションでのデータ項目の和集合を含むデータを社内システムサーバ160が保持することで、何らかの共通点がある複数のアプリケーション間でのデータ共有が可能となる。
例えば、第1のSaaSアプリケーションサーバが提供する第1のアプリケーションでは利用者の氏名が管理されるが住所は管理されず、第2のSaaSアプリケーションサーバが提供する第2のアプリケーションでは利用者の氏名と住所の双方が管理される場合がある。この場合、氏名と住所の双方を含む、第2のアプリケーションでのデータ形式(すなわち第2の外部形式)が、内部形式として利用されてもよい。
そして、ページ内容送受信部154は、第1のアプリケーションの利用時には、必要に応じた形式の変換に加えてさらに、「内部形式のデータから住所を削除する」という変換を行ってもよい。
ページ内容送受信部154は、第1のアプリケーションの利用時の逆変換として、例えば次のような2つの処理を含む逆変換処理を行ってもよい。
・現状の内部形式のデータに含まれる住所のデータを読み込んで、読み込んだ住所のデータをそのまま出力する。
・第1のアプリケーションを介して編集された可能性のある氏名を、利用者のブラウザ120からの入力データから得て、必要に応じて形式を変換したうえで、出力する。
また、第1のアプリケーションでは利用者の氏名と住所が管理され、第2のアプリケーションでは利用者の氏名と電話番号が管理される場合がある。この場合、社内システムサーバ160は、氏名と住所と電話番号を含むデータを内部データとして保持してもよい。
そして、ページ内容送受信部154は、第1のアプリケーションの利用時には、必要に応じた形式の変換に加えてさらに、「内部形式のデータから電話番号を削除する」という変換を行ってもよい。また、ページ内容送受信部154は、第2のアプリケーションの利用時には、必要に応じた形式の変換に加えてさらに、「内部形式のデータから住所を削除する」という変換を行ってもよい。
なお、逆変換のためには、上記の例と同様に、必要に応じてページ内容送受信部154は、現状の内部形式のデータに含まれる住所または電話番号のデータを読み込んで、そのまま出力の一部に加える処理を行えばよい。
以上のように第4実施形態によれば、第1〜第3実施形態と同様の効果に加えてさらに、複数のSaaSアプリケーションで同じデータを共有することで、柔軟にアプリケーション間の連携を実現することも可能となる。なぜなら、複数のSaaSアプリケーションで共通して利用されるデータは、第4実施形態によれば、個々のSaaSアプリケーションの提供元に分散してばらばらに格納され管理されるのではなく、社内システムサーバ160で一元管理されるからである。
ところで、以上説明した第1〜第4実施形態における中継サーバ130は、例えば、図23に示すコンピュータ900により実現することができる。
図23は、コンピュータの構成図である。コンピュータ900は、CPU(Central Processing Unit)901、ROM(Read Only Memory)902などの不揮発性メモリ、ワークエリア用のRAM903を備える。また、コンピュータ900は、利用者のブラウザ120が稼働しているPC、社内システムサーバ160およびSaaSアプリケーションサーバ180などの他のコンピュータとネットワークを介して通信を行うための、通信インタフェイス904を備える。
コンピュータ900はさらに、キーボードやポインティングデバイスなどの入力装置905、ディスプレイやスピーカなどの出力装置906、HDDなどの記憶装置907、および可搬型記憶媒体910の駆動装置908を備える。また、コンピュータ900が備える上記各部は、バス909で互いに接続されている。
以下、図9、図11、および図15の処理をコンピュータ900に行わせることでコンピュータ900を中継機能部150として機能させるプログラム、コンピュータ900を中継サーバ130として機能させるプログラムをまとめて「中継プログラム」という。
中継プログラムは、例えば記憶装置907に格納され、RAM903に読み込まれ、CPU901によって実行されてもよい。あるいは、中継プログラムは、可搬型記憶媒体910に格納され、駆動装置908を介して読み取られ、RAM903に展開され、CPU901により実行されてもよい。可搬型記憶媒体910の例は、CD−ROM(Compact Disc Read Only Memory)、CD−R(Compact Disc Recordable)、DVD(Digital Versatile Disc)、光磁気ディスク、磁気ディスク、半導体メモリカード等である。また、中継プログラムは、ネットワークと通信インタフェイス904を介して他のコンピュータからコンピュータ900にダウンロードされてもよい。
図1の認証部141、リクエスト受付部151、ページ内容送受信部154およびページ内容送信部155は、例えば、CPU901が通信インタフェイス904と協働しながら中継プログラムを実行することで実現される。リクエスト先変換部152は、CPU901が中継プログラムを実行することで実現される。
また、図1のセッション管理表142は、例えばRAM903に記憶される。また、利用者認証情報143と書き換えURI管理表153とダミーデータ保持部156は、例えば記憶装置907に記憶され、必要に応じてRAM903に読み出されてもよい。
なお、例えば第1実施形態の説明において、便宜上、利用者のブラウザ120から受け付けたリクエストがリクエスト受付部151からリクエスト先変換部152、ページ内容送受信部154へと順に出力されるように説明した。しかし、利用者のブラウザ120から受信したリクエストを、リクエスト受付部151としての通信インタフェイス904が、受信バッファとしてのRAM903に格納してもよい。そして、リクエスト先変換部152とページ内容送受信部154としてのCPU901が、適宜受信バッファを参照するのでもよい。
以上を換言すれば、CPU901と通信インタフェイス904は、コンピュータ900が接続される第1のネットワーク内のクライアントからの、第2のネットワーク内のサーバに対する第1の要求を受信する受信手段の一例であり、受信した第1の要求をサーバに中継することができる。また、受信手段としてのCPU901と通信インタフェイス904は、サーバからの、第1の要求に対する外部応答をクライアントに中継することもできる。
そして、記憶装置907またはRAM903は、サーバ上の外部リソースを判別する外部リソース判別情報と、第1のネットワーク内の内部リソースを判別する内部リソース判別情報とを対応付ける第1の対応付け情報を保持する第1の対応付け情報保持手段として機能する。また、記憶装置907またはRAM903は、外部リソースに書き込むダミー情報を保持するダミー情報保持手段、および外部リソース判別情報とダミー情報とを対応付ける第2の対応付け情報を保持する第2の対応付け情報保持手段としても機能する。第1と第2の対応付け情報の例は、それぞれ、図10のデータ801と図12のデータ802である。
また、CPU901は、下記の検索手段、判定手段、置換手段として機能することもでき、CPU901と通信インタフェイス904は協働して、下記の要求送信手段および発行手段として機能することもできる。
すなわち、CPU901は、第1の対応付け情報を参照することにより、第1の要求の対象である対象外部リソースに対応する対象内部リソースを判別する対象内部リソース判別情報を検索する検索手段として機能する。
また、第1の要求が、要求ペイロード情報により示される内容に対象外部リソースの内容を更新することを要求しており要求ペイロード情報を含む更新要求であるか否かを判定する判定手段としても、CPU901は機能する。
また、判定手段としてのCPU901が「第1の要求は更新要求である」と判定した場合に、CPU901は、さらに置換手段として次のように動作する。すなわち、CPU901は、第2の対応付け情報を参照し、対象外部リソース判別情報に対応するダミー情報を特定する。そして、CPU901は、要求ペイロード情報を、対象外部リソース判別情報に対応して記憶装置907またはRAM903に記憶されており上記のようにして特定されたダミー情報に置換する。
そして、CPU901と通信インタフェイス904は、置換が行われた第1の要求をサーバに送信することで、協働して要求送信手段として機能する。
また、CPU901は、「第1の要求は更新要求である」と判定した場合に、対象内部リソースの内容を置換前の要求ペイロード情報により示される内容に更新するよう要求する第2の要求を発行する発行手段としても機能する。さらに通信インタフェイス904が発行手段の一部としてCPU901と協働してもよい。
例えば、上記実施形態では、内部リソースは中継サーバ130とは別の社内システムサーバ160に格納されているので、CPU901と通信インタフェイス904が協働して、HTTPリクエストの形式で第2の要求を発行し、協働して発行手段として機能する。
しかし、中継サーバ130と社内システムサーバ160が物理的に同じコンピュータ900であってもよい。その場合、図1のアプリケーションデータ163は記憶装置907に格納されるので、図1のリクエスト受付部161とページ内容送信部162は省略可能である。また、第2の要求は、例えばコンピュータ900内部の入出力要求として、発行手段としてのCPU901により発行される。
また、第1の要求が、対象外部リソースの参照を要求する参照要求であると判定したとき、CPU901は、次の処理も行う。すなわち、CPU901は、第1の要求に対するサーバからの外部応答に含まれており対象外部リソースの内容を示す外部応答ペイロード情報を、対象外部リソース判別情報に対応するダミー情報として記憶装置907に記憶させる制御を行う。さらに、CPU901は、対象内部リソースの参照を要求する第3の要求を発行する。
このように第1の要求が参照要求であるとき、CPU901は、必要に応じて通信インタフェイス904と協働しながら、第3の要求に対する応答(すなわち第1のネットワーク内で完結する通信に関する応答)をクライアントに送信するための制御を行う。第2の要求がHTTPリクエストであれば、応答はHTTPレスポンスであり、第2の要求がコンピュータ900内部の入出力要求であれば、応答は入出力応答である。
なお、本発明は上記の実施形態に限られるものではなく、様々に変形可能である。例えば、2つ以上の上記の実施形態を適宜組み合わせることもできる。
また、SaaSアプリケーションサーバ180が提供するアプリケーションは、ブラウザベースのウェブアプリケーションでなくてもよい。例えば、上記の各実施形態は、次のような広義のリッチクライアントアプリケーションにも適用することができる。
・利用者のPCなどのクライアントは、SaaSアプリケーションサーバ180から読み出したコードにしたがって処理を行う。
・クライアントは、SaaSアプリケーションサーバ180との間でのHTTP通信を行う。
・上記HTTP通信は、第1実施形態のようにRESTスタイルに準じているか、または第2実施形態のようにRESTスタイルに比較的近いスタイルに則っている。
以上説明した様々な実施形態のいずれにおいても、従来は情報漏洩が心配されるために利用がためらわれた業務に関しても、利用者が入力したデータが利用者の社内ネットワーク110の外に出ることを防ぐことが可能となる。したがって、上記の実施形態によれば、企業ユーザ等が、外部サイトからの情報漏洩の心配なしにSaaSアプリケーションを利用することが可能となる。
また、上記の各実施形態によれば、利用者の社内ネットワーク110の外部のSaaSアプリケーションサーバ180に送信されるデータそのものが検索対象となるのではなく、URIが検索キーとして利用される。よって、利用者のブラウザ120から送信されるデータが、例えばプレインテキスト形式ではなくバイナリ形式や暗号化形式などであっても、書き換えURI管理表153さえ適切に管理されていれば、データが秘匿対象か否かが確実かつ適切に判断される。また、上記の各実施形態によれば、「データ形式が原因で、秘匿対象のデータか否かの判断に失敗する」あるいは「検索の結果、秘匿対象と判断されたデータの一部を機械的に置換することで、データ全体が不正な形式になってしまう」といったことが防げる。
さらに、上記各実施形態によれば、アプリケーション提供元サイト170の運営者にとっても利点がある。なぜなら、各利用者が自身の都合に応じて書き換えURI管理表153を適宜設定しておくだけで、利用者ごとの希望に応じた情報の秘匿が可能になるので、SaaSアプリケーションサーバ180が提供するアプリケーションには変更の必要がないからである。
また、アプリケーションデータ183としてSaaSアプリケーションサーバ180に格納されるダミーデータは、一般に実データよりもデータサイズが小さい。よって、上記各実施形態には、SaaSアプリケーションサーバ180における記憶領域の節約という、SaaSアプリケーションサーバ180にとっての利点もある。
したがって、上記各実施形態は、広範囲のSaaSアプリケーションについて、情報の秘匿とアプリケーションの機能の享受を両立させることが可能なので、SaaSアプリケーションの普及促進に役立つ。
最後に、さらに下記の付記を開示する。
(付記1)
クライアントを有する第1のネットワーク内の中継装置において実行される中継プログラムであって、
前記中継装置に、
前記クライアントから、第2のネットワーク内のサーバに対する、該サーバ上の対象外部リソースに関する第1の要求を受信する要求受信ステップと、
前記サーバ上の外部リソースを判別する外部リソース判別情報と、前記第1のネットワーク内の内部リソースを判別する内部リソース判別情報とを対応付ける第1の対応付け情報を参照することにより、前記対象外部リソースに対応する対象内部リソースを判別する対象内部リソース判別情報を検索する検索ステップと、
前記第1の要求が、要求ペイロード情報を含み、前記対象外部リソースの内容を前記要求ペイロード情報により示される内容に更新することを要求する更新要求であるか否かを判定する判定ステップと、
前記判定ステップにおいて、前記第1の要求が前記更新要求であると判定された場合に、外部リソース判別情報と第1のネットワーク内のダミー情報保持部に保持されたダミー情報とを対応付ける第2の対応付け情報を参照し、前記対象外部リソースを判別する対象外部リソース判別情報に対応するダミー情報を特定し、前記要求ペイロード情報を、特定された前記ダミー情報により置換する第1の置換ステップと、
前記置換ステップにおいて前記置換が行われた後、置換後の前記第1の要求を、前記サーバに送信する第1の要求送信ステップと、
前記第1の要求送信ステップにおいて、置換後の前記第1の要求を前記サーバに送信する場合に、前記対象内部リソースの内容を置換前の前記要求ペイロード情報により示される前記内容に更新するよう要求する第2の要求を発行する第1の発行ステップと、
を実行させることを特徴とする中継プログラム。
(付記2)
前記検索ステップの結果、前記対象内部リソースを判別する前記内部リソース判別情報が見つからなかった場合は、前記中継装置に、さらに、
前記第1の要求を前記サーバに送信する第2の要求送信ステップと、
前記第1の要求に対して前記サーバから得られる外部応答の内容を前記クライアントに送信する第1の応答送信ステップと、
を実行させることを特徴とする付記1に記載の中継プログラム。
(付記3)
前記第1の置換ステップにおいて、前記対象外部リソース判別情報に対応する前記ダミー情報が見つからなかった場合に、前記対象外部リソース判別情報に対応に対応付けられて予め記憶されているデフォルトダミー情報を取得し、前記要求ペイロード情報を前記デフォルトダミー情報に置換する第2の置換ステップを、
さらに前記中継装置に実行させることを特徴とする付記1または2に記載の中継プログラム。
(付記4)
前記第1の発行ステップは、前記対象外部リソース判別情報に対応付けられている逆変換プログラムにしたがって前記要求ペイロード情報の形式を逆変換する逆変換ステップを含み、前記第1の発行ステップでは、逆変換された前記要求ペイロード情報を含む前記第2の要求が発行されることを特徴とする付記1から3のいずれか1項に記載の中継プログラム。
(付記5)
前記対象外部リソースおよび前記対象内部リソースはXML文書であり、
前記逆変換プログラムはXSLT文書である、
ことを特徴とする付記4に記載の中継プログラム。
(付記6)
前記判定ステップにおいて、前記第1の要求が前記対象外部リソースの参照を要求する参照要求であると判定された場合に、前記第1の要求をそのまま前記サーバに送信する第2の要求送信ステップと、
前記第2の要求送信ステップにおいて、前記第1の要求をそのまま前記サーバに送信した場合に、前記第1の要求に対する前記サーバからの外部応答に含まれており前記対象外部リソースの前記内容を示す外部応答ペイロード情報を、前記対象外部リソース判別情報に対応するダミー情報として前記ダミー情報保持部に保持させ、かつ、前記対象内部リソースの参照を要求する第3の要求を発行する第2の発行ステップと、
をさらに前記中継装置に実行させることを特徴とする付記1から5のいずれか1項に記載の中継プログラム。
(付記7)
前記第1の要求が前記対象外部リソースの参照を要求する前記参照要求であるとき、前記対象内部リソースがもし存在しなければ、
前記対象外部リソース判別情報に対応付けられた前記ダミー情報を取得し、取得した前記ダミー情報を含むように加工したダミー応答を前記クライアントに送信する第2の応答送信ステップを、
前記中継装置に実行させることを特徴とする付記6に記載の中継プログラム。
(付記8)
前記第3の要求に対する内部応答を受信し、前記対象内部リソースの内容を示す情報として前記内部応答に含まれている内部応答ペイロード情報の形式を、前記対象外部リソース判別情報に対応付けられている変換プログラムにしたがって変換し、変換された前記内部応答ペイロード情報を含む応答を前記クライアントに送信する第3の応答送信ステップ
をさらに前記中継装置に実行させることを特徴とする付記6に記載の中継プログラム。
(付記9)
前記対象外部リソースおよび前記対象内部リソースはXML文書であり、
前記変換プログラムはXSLT文書である、
ことを特徴とする付記8に記載の中継プログラム。
(付記10)
前記第1の要求はHTTPリクエストであり、前記サーバは前記第1の要求に対してHTTPレスポンスを返すことを特徴とする付記1から9のいずれか1項に記載の中継プログラム。
(付記11)
前記第2の要求は、前記対象内部リソースを記憶する記憶装置を備える前記第1のネットワーク内の内部サーバに対するHTTPリクエストであり、
前記内部サーバは前記第2の要求に対してHTTPレスポンスを返す、
ことを特徴とする付記10に記載の中継プログラム。
(付記12)
前記中継装置が、前記対象内部リソースを記憶する記憶装置を備えており、
前記第2の要求は、前記記憶装置に対する入出力要求であり、
前記記憶装置は、前記入出力要求に対する入出力応答を返す、
ことを特徴とする付記10に記載の中継プログラム。
(付記13)
前記対象外部リソース判別情報は、前記対象外部リソースを識別する第1のURIまたは前記第1のURIの少なくとも一部を含む文字列パターンであり、
前記対象内部リソース判別情報は、前記対象内部リソースを識別する第2のURI、前記対象内部リソースが記憶される記憶装置における前記対象内部リソースのローカルパス、または、前記第2のURIもしくは前記ローカルパスの少なくとも一部を含む文字列パターンである、
ことを特徴とする付記1から12のいずれか1項に記載の中継プログラム。
(付記14)
前記クライアントは、前記サーバから読み込んだクライアント側プログラムにしたがって前記第1の要求を発行するウェブブラウザであることを特徴とする付記1から13のいずれか1項に記載の中継プログラム。
(付記15)
クライアントを有する第1のネットワーク内の中継装置であって、
前記クライアントから、第2のネットワーク内のサーバに対する、該サーバ上の対象外部リソースに関する第1の要求を受信する受信手段と、
前記サーバ上の外部リソースを判別する外部リソース判別情報と、前記第1のネットワーク内の内部リソースを判別する内部リソース判別情報とを対応付ける第1の対応付け情報を保持する第1の対応付け情報保持手段と、
ダミー情報を保持するダミー情報保持手段と、
前記外部リソース判別情報と前記ダミー情報とを対応付ける第2の対応付け情報を保持する第2の対応付け情報保持手段と、
前記第1の対応付け情報を参照することにより、前記対象外部リソースに対応する対象内部リソースを判別する対象内部リソース判別情報を検索する検索手段と、
前記第1の要求が、要求ペイロード情報を含み、前記対象外部リソースの内容を前記要求ペイロード情報により示される内容に更新することを要求する更新要求であるか否かを判定する判定手段と、
前記第1の要求が前記更新要求であると前記判定手段が判定した場合に、前記第2の対応付け情報を参照し、前記対象外部リソースを判別する対象外部リソース判別情報に対応するダミー情報を特定し、前記要求ペイロード情報を、特定された前記ダミー情報により置換する置換手段と、
前記置換手段による置換が行われた前記第1の要求を、前記サーバに送信する要求送信手段と、
前記第1の要求が前記更新要求であると前記判定手段が判定した場合に、前記対象内部リソースの内容を置換前の前記要求ペイロード情報により示される前記内容に更新するよう要求する第2の要求を発行する発行手段と、
を備えることを特徴とする中継装置。