- PR -

Actionの結果、別プロジェクトに遷移したい

1
投稿者投稿内容
ニシモ
会議室デビュー日: 2008/05/26
投稿数: 4
投稿日時: 2008-05-26 11:44
Strutsをベースとしたプロジェクトを構築しているのですが、
一つのActionを実行した結果、別のプロジェクト(webサーバは同じ)
に遷移したいと思っているのですが、どうすれば実現できるか困っております。

どうか知恵をお貸しください。

【要件】
・ユーザ区分ごとに、スキーマを分ける。
 (DBスキーマだけでなく、webプロジェクトごと分割する(サーバは同一でwebappsのみ別)。)
 
【構想】
・まず、共通のプロジェクトにてログイン処理を行い、
 その際に、ユーザマスタから取得した区分によって、遷移するpathを指定し、
 それぞれのプロジェクトのログイン後の画面を表示したい。

【問題】
・共通のログインAcitonの中で、ユーザマスタをselectして、ユーザ区分は取得できるのですが、
 その後に遷移先の指定ができない。

・struts-config.xmlの<forward name="success" path="/pages/UserList.vm" />
 のPathをActionの中で動的に宣言することはできそうだが、pathには"/"から始まるパスしか
 許可していないっぽい。

  →ためしに<forward name="success" path="http://www.yahoo.co.jp" />
  
     とするとExceptionが発生。
   
   (java.lang.IllegalArgumentException: パス http://www.yahoo.co.jp が"/"文字で始まりません)


どうにか別webapps遷移先に指定を行うことはできないでしょうか?


nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2008-05-26 11:59
ブラウザ上から単純に外のWebアプリケーションのURLへリンクしたaタグをクリックすると遷移できますよね。
考え方はそれと同じで、Strutsの範囲内で遷移させようとせず、HTMLおよびHTTP的に遷移させればよいのです。

処理を行った後で遷移したいのであれば、HTTPのレスポンスコードを302 Moved Temporarilyとしてブラウザ側からリダイレクトさせるのが簡単です。
この際問題となるのは、ログインなどの認証関係でしょうか。サーバ間で通信させるとか、工夫が必要になることが多いですね。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-05-26 13:21
フォワードは同じアプリケーションに処理を委譲するためのものですので、
nagiseさんのおっしゃるとおり、リダイレクトさせるのが筋です。

アプリケーションサーバ固有でシングルサインオンとか、
クロスコンテキストによる情報の共有とかも可能です。

ちなみに、
引用:

<forward name="success" path="http://www.yahoo.co.jp" />


ではなく、
コード:
<forward name="success" path="http://www.yahoo.co.jp" redirect="true"/>


ではどうですか?
ニシモ
会議室デビュー日: 2008/05/26
投稿数: 4
投稿日時: 2008-05-26 19:14
>かつのり様
 struts-config.xmlの記述をご指摘のように変更したら無事yahooが表示されました!
 こんな記述ができること、初めて知りました。

>nagise様
 ありがとうございます。とりあえずリダイレクトで、別プロジェクトの画面を表示することができました。
 認証等、まだ問題はありますが、前に進めそうです。

お二人ともありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)