1

我有以下将第三方应用程序集成到我的 java 应用程序中的场景。第三方应用程序运行在与我的 java 应用程序不同的上下文中。它提供了一个 JSP,需要使用某些参数(例如身份验证信息)调用该 JSP,并根据该参数生成 cookie 值并将其设置在标头中。我需要从我的 java 应用程序中调用此 JSP,然后使用 cookie 值从响应中检索标头,并将其设置为将在我的应用程序中创建的新 cookie。

我能够使用调用 JSP

response.sendRedirect("http://<host>:<port>/<context>/authn.jsp").

authn.jsp 能够检索所有发送的验证值并生成 cookie 值。然后它执行

response.setHeader(attr,val).

但是,我不确定如何在我的 servlet 中读取此响应标头。request.sendRedirect 是正确的方法吗?我是否需要使用 HTTPURLConnection 类来实现这一点?

4

2 回答 2

2

您需要使用HTTPURLConnection来读取标题。你不能使用response.sendRedirect(..). 收到标头后,您可以response.setHeader(attr,val)在代码中进行设置。

URL url = new URL("JSPURL");
URLConnection conn = url.openConnection();
for (int i = 0;; i++) {
  String headerName = conn.getHeaderFieldKey(i);
  String headerValue = conn.getHeaderField(i);
  System.out.println(headerName + "===");
  System.out.println(headerValue);
  if (headerName == null && headerValue == null) {
    break;
  }
}
于 2012-08-15T18:41:04.093 回答
1

如果您使用的是 Tomcat 并且两个应用程序都部署到同一个服务器实例中,那么您可以将两个 servlet 应用程序配置为接受来自彼此的传入请求。这是通过context configurationcrossContext中的属性完成的。

然后,从您的 servlet 中,您可以RequestDispatcher对其他 Web 应用程序使用 a:

RequestDispather dispatcher = request.getRequestDispatcher("/<context>/authn.jsp");
dispatcher.forward(request, response);
// Process the headers
Enumeration<String> headerNames = response.getHeaderNames();
while(headerNames.hasMoreElements()) {
   Collection<String> values = response.getHeaders(headerNames.nextElement());
   // do whatever with the header values.
}

注意:其他 servlet 容器具有类似的配置跨上下文功能的方法,您应该查看容器的配置文档。

于 2012-08-15T18:59:28.307 回答