###実現したいこと
表題の件です。
javaで作られた帳票出力するAPIがあるのですが
(1)あるユーザがリンクを踏むと、上記java帳票出力APIにアクセスします。
(2)java帳票出力アプリは、帳票出力の元となるデータを、SalesfoceにOAuth認証して取得しにいきます。
(3)(2)で、まだSalesforceよりアクセストークンが取得していない場合は、SalesforceのOAUTH認証画面が表示され、許可をすると、その後、Salesfoce側に事前に設定したcallbackURLをSalesfoceが参照して、java帳票出力APIのcallbackURLに戻ってきます。
(4)(3)で受けっとったjava帳票出力APIのcallbackURLの処理で、
アクセストークンを取得を試しみて、取得が終わったら、
本来の(1)でリクエストされた、帳票出力ページへリダイレクトをかけます。
ここで問題なのが、
(1)の時に、cookieにリクエストされたURLの情報を保存しておいて、
(4)のリダイレクトをかける時、その情報を復元してと考えたのですが、
(1)の時点では、キックするのはそのユーザで、java帳票出力APIのドメインでcookieが吐き出されるかと思いますが、
一方、(4)では、キックするのはsalesfoceになるので、
(1)でcookieした情報が取得できません。
どのような方針で実装すれば、(1)のURLへOAUTH認証後に戻れるのでしょうか。
何卒よろしくお願い致します。。
###該当のソースコード
(1)部分
java
1 2// セッション取得 3HttpSession session = request.getSession(); 4 5// アクセストークン取得 6String accessToken = (String) session.getAttribute("accessToken"); 7 8// アクエストークン保持状態で分岐 9if (accessToken == null || accessToken.length() == 0) { 10 // リクエスト帳票URLをCookieに保持しておいて、認証画面へリダイレクト 11 try { 12 // ############ リクエスト帳票URLをCookieに格納 ################## 13 Cookie reqCookie = new Cookie("requestUrl", request.getRequestURI() + "," + request.getQueryString()); 14 response.addCookie(reqCookie); 15 16 // Salesforceログインページへリダイレクト 17 response.sendRedirect(config.get("authUrl")); 18 return false; 19 } catch (IOException e) { 20 e.printStackTrace(); 21 } 22} else { 23 // アクセストークンの有効期限切れチェック 24 Boolean result = OAuth.accessTokenAuth(accessToken, config, session); 25 if (!result) { 26 // error 27 } 28}
(4)のcallback受け取り部分
java
1 2// 認証コード取得 3String code = request.getParameter("code"); 4 5// 認証コードを元にアクセストークン取得する 6Boolean result = OAuth.doAuthorizeByAuthCode(code, config, request.getSession()); 7if (!result) { 8 //error 9} 10 11// cookieにある帳票リクエスト先へリダイレクト ######## ここでは(1)でセットしたcookieが取得できない ######## 12String reqUrl = null; 13Cookie[] reqCookie = request.getCookies(); 14if (reqCookie != null) { 15 for (int i=0; i<reqCookie.length; i++) { 16 System.out.print("name" + reqCookie[i].getName()); 17 System.out.print("name" + reqCookie[i].getValue()); 18 reqUrl = reqCookie[i].getValue(); 19 } 20} else { 21 // error 22} 23String[] req = reqUrl.split(",", 0); 24response.sendRedirect(request.getContextPath() + req[0] + "?" + req[1]);
あなたの回答
tips
プレビュー