2

我有一种情况,需要引入一个中间 servlet,它将处理来自现有项目的请求,并将操纵的响应重定向到现有项目或新项目。这个 servlet 将充当从其他应用程序登录到新项目的接口。

所以目前我使用以下代码在 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>

但是现在我想用 servlet 来做同样的事情,有可能吗?

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

更新

我只是想出了一些东西。

是否可以返回一个带有表单(来自 servlet)的 html 页面,on body load它将提交一个表单,并且在提交此表单时,它将收到将被处理的响应xml

4

2 回答 2

4

使用java.net.URLConnectionApache HttpComponents Client然后,使用JAXB之类的 XML 工具解析返回的 HTTP 响应。

开球示例:

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

实际上,您可能想要的根本不是中间 servlet。您可能想要的是一个 servlet 过滤器,而编写一个过滤器并不是特别难。以前写过一篇,昨天刚开始写一篇。

这篇这篇文章这样的文章非常简单地阐述了如何使用 servlet 过滤器来拦截对特定 URL 的调用,然后从那里重定向或拒绝。如果传入的 URL 与过滤器的模式匹配,它将获得请求和响应的机会,然后它可以选择是否将其传递给行中的下一个过滤器。

我不知道是否所有第三方安全解决方案都这样做,但至少 CAS 似乎是这样实现的。

于 2012-05-02T13:18:32.073 回答