2011-08-13 12 views
1

変数をセッションデータのサーブレットに保存します。サーブレットはユーザをサードパーティのサイトにリダイレクトし、サードパーティのサイトユーザからは同じWebアプリのJSPページに送信されます。私はサーブレット(サードパーティのサイトへのリダイレクトの前に)に格納されたセッション変数にJSPでアクセスします。どのようにしてこのようなオブジェクトをサーブレットに格納しますか?そして、JSPファイルからそのオブジェクトにどのようにアクセスすればよいですか?サードパーティサイトからのコールバック要求時に後でアクセスする必要があるセッションに値を保存するにはどうすればよいですか?

答えて

0

コールバック要求が、の同じセッションを初期リクエストとして使用するようにサーバーに何らかの方法で指示する必要があります。通常、これはリクエストヘッダーにセッションクッキーを設定することによって行われます。しかし、サードパーティーのサイトではこれを行うつもりはありません。ただし、サーブレットAPIでは、URLのJSESSIONIDフラグメントによってセッションを識別することができます。

だから、次のようにあなたがあなたのコールバックURLを構築する場合、

HttpSession session = request.getSession(); 
session.setAttribute("someName", someObject); 

String callbackURL = "http://yourhost.com/callback.jsp;JSESSIONID=" + session.getId(); 
String redirectURL = "http://otherhost.com/process?callbackURL=" + URLEncoder.encode(callbackURL, "UTF-8"); 

response.sendRedirect(redirectURL); 

callback.jspは、このようにも保存されているすべての属性を同じセッションへのアクセス権を持っているとしますこの方法です。ところで、doGet()のサーブレットを実際に使用する必要があります。事前処理JavaコードはJSPに属していません。


別に具体的な質問から、これを達成するための別の方法があります:長い、自動生成され、一意のキー(例えばjava.util.UUID)によって、アプリケーションスコープに関心のある情報を格納するためにリクエストパラメータとして追加しますが、コールバックURLコールバックを処理するときは、セッションスコープではなくアプリケーションスコープから取得するだけです。これは通常、親ウィンドウをリフレッシュするポップアップウィンドウ内で実行され、JavaScriptでコールバックを正常に処理した後に閉じます。このように、セッションについて心配する必要はありません。

+0

サードパーティのURLは、基本的にホットメールやyahooやgmail経由でユーザーを認証することです。サイト(例:ホットメール)での認証が成功した後、ユーザーは同じWebアプリケーション内の別のURLに戻ります... apiキー(hotmail認証を使用するための)の生成のための画面では、単一の固定URLを入力するための規定があるので、コールバックのパラメータとしてのセッションID ...私がそのようなシナリオで何をすべきかアドバイスしてください...フローは、web app servlet - > hotmail auth - > web app jsp(または私のところまであるサーブレット)です。 – Arvind

関連する問題