我有以下将第三方应用程序集成到我的java应用程序中的方案。第三方应用程序在与我的java应用程序不同的上下文中运行。它提供了一个JSP,需要使用某些参数调用,例如基于它生成cookie值的身份验证信息,并在头中设置它。我需要从我的java应用程序中调用这个JSP,然后从响应中检索带有cookie值的头文件,并将其设置为将在我的应用程序中创建的新cookie。
我能够使用
调用JSPresponse.sendRedirect("http://<host>:<port>/<context>/authn.jsp").
authn.jsp能够检索发送身份验证的所有值并生成cookie值。然后它做了
response.setHeader(attr,val).
但是,我不知道如何在我的servlet中读回这个响应头。 request.sendRedirect是否有正确的方法来执行此操作?我是否需要使用HTTPURLConnection类来实现此目的?
答案 0 :(得分: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;
}
}
答案 1 :(得分:1)
如果您正在使用Tomcat并且两个应用程序都部署到同一服务器实例中,那么您可以配置两个servlet应用程序以接受来自彼此的传入请求。这是通过context configuration中的crossContext
属性完成的。
然后,从您的servlet中,您可以对其他Web应用程序使用RequestDispatcher
:
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容器具有类似的配置交叉上下文功能的方法,您应该检查容器的配置文档。