2

既存のプロジェクトからのリクエストを処理し、操作された応答を既存のプロジェクトまたは新しいプロジェクトにリダイレクトする中間サーブレットを導入する必要がある状況があります。このサーブレットは、他のアプリケーションから新しいプロジェクトにログインするためのインターフェイスとして機能します。

したがって、現在、次のコードを使用して、jsp で応答を xml として取得しています。

var jqxhr =$.post("http://abhishek:15070/abc/login.action",
                  { emailaddress:   "ars@gmail.com",
                    projectid:      "123" },
                      function(xml)
                      {
                            if($(xml).find('isSuccess').text()=="true")
                            {
                                sessiontoken=$(xml).find('sessiontoken').text();

                                setCookie("abcsessionid", sessiontoken , 1);
                                setCookie("abcusername",e_add,1);
                            }
                      }
                )
                .error(function() {
                    if(jqxhr.responseText == 'INVALID_SESSION') {
                        alert("Your Session has been timed out");
                        window.location.replace("http://abhishek:15070/abc/index.html"); 
                    }else  {
                        alert( jqxhr.responseText);
                    }
                 });

XMLコンテンツ

<Response>
  <sessiontoken>334465683124</sessiontoken>
  <isSuccess>true</isSuccess>
</Response>

しかし、今はサーブレットを使って同じことをしたいのですが、可能ですか?

String emailid=(String) request.getParameter("emailaddress");
String projectid=(String) request.getParameter("projectid");

アップデート

私はちょうど何かを思いつきました。

フォームを送信する(サーブレットから)フォームを含むhtmlページを返すことは可能ですか?on body loadこのフォームの送信時に、処理される応答xmlを受け取ります。

4

2 に答える 2

4

java.net.URLConnectionまたはApache HttpComponents Clientを使用します。次に、返された HTTP 応答をJAXBなどの XML ツールで解析します。

キックオフの例:

String emailaddress = request.getParameter("emailaddress");
String projectid = request.getParameter("projectid");
String charset = "UTF-8";
String query = String.format("emailaddress=%s&projectid=%s", 
    URLEncoder.encode(emailaddress, charset),
    URLEncoder.encode(projectid, charset));

URLConnection connection = new URL("http://abhishek:15070/abc/login.action").openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Accept-Charset", charset);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset);
try {
    connection.getOutputStream().write(query.getBytes(charset));
}
finally {
    connection.getOutputStream().close();
}
InputStream response = connection.getInputStream();
// ...

以下も参照してください。

于 2012-05-02T13:13:29.283 に答える
0

実際、おそらく必要なのは中間サーブレットではありません。あなたがおそらく必要とするものは、サーブレット フィルターと呼ばれるものであり、それを作成することは特に難しいことではありません。過去に書いたことがありますが、昨日新しいものを書き始めました。

この記事やこの記事のような記事で、サーブレット フィルターを使用して特定の URL への呼び出しを傍受し、そこからリダイレクトまたは拒否する方法を非常に簡単に説明しています。着信 URL がフィルターのパターンと一致する場合、要求と応答を取得し、それを次のフィルターに渡すかどうかを選択できます。

すべてのサードパーティのセキュリティ ソリューションがこのように実装されているかどうかはわかりませんが、少なくとも CAS はそのように実装されているようです。

于 2012-05-02T13:18:32.073 に答える