【发布时间】:2020-02-23 20:20:38
【问题描述】:
以前的场景:- 用户通过Portal登录并点击某个链接,Portal将包含Headers(用户名)的请求发送到报告服务器以检索报告。
当前情景:- 门户已重新编写,并且标头现在采用 JSON 格式,用于完成身份验证的标头值以不同的方式命名。我们考虑拦截请求并以报告服务器读取的方式重新排列标头,以便请求可以通过。
我们考虑将这个新的拦截器应用程序部署在报告服务器所在的同一框上的新 Tomcat 服务器中,并且我不能使用 RequestDispatcher.forward 和 sendRedirect 如果我使用会使我在将 sendRedirect 作为浏览器之前添加的任何 Header 值无效将发出新的请求。
我尝试使用 HttpClient ,通过添加 Header 值打开与报告服务器的新 Http 连接,但是当我在我的 chrome 浏览器中的 Fiddler 或 HTTP Header spy 中检查相同内容时,我在客户端请求对象中看不到任何 Header 值。我正在尝试从报告服务器捕获响应对象并在我的原始请求中设置相同的内容,并将其设置在我的 servlet 的原始响应对象中以推送到客户端浏览器。但是由于我的 Header 值没有在 HTTPClient Post 请求中设置,所以请求永远不会满足。
下面是从我的拦截器 servlet 创建 HTTPClient 的相同代码。
String url = "someurl";
HttpClient client = HttpClientBuilder.create().build();
//HttpGet get = new HttpGet();
HttpPost post = new HttpPost(url);
try {
String smUser = "<user name>";
String grps = "<some values>";
post.addHeader(<headerKey1>,<smUser>);
post.addHeader(<headerkey2>, grps);
HttpResponse response = client.execute(post);
BufferedReader buff = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
response.getEntity().getContent();
String inputLine;
StringBuffer html = new StringBuffer();
while ((inputLine = buff.readLine()) != null) {
html.append(inputLine);
}
buff.close();
System.out.println("URL Content... \n" + html.toString());
我知道我可以使用 url 重写,但这不是一个选项,请告诉我是否有任何其他方式可以让我的拦截器更改 Header 值并将请求传递给报告服务器,以便用户可以访问报告.
【问题讨论】:
标签: java servlets apache-httpclient-4.x