如果我正在使用reacte.sendRedirect

时间:2019-05-08 21:25:46

标签: java

以前的情况:- 用户通过门户网站登录,然后单击某个链接,门户网站将包含标头(用户名)的请求发送到报告服务器以检索报告。

当前方案:- 门户已被重写,并且标头现在采用JSON格式,通过不同的方式来命名用于进行身份验证的标头值。我们考虑拦截请求,并以报告服务器读取方式重新安排标头,以便请求可以通过。

我们考虑过将这个新的Interceptor应用程序部署在Reporting服务器所在的同一框中的新Tomcat服务器中,并且如果使用null,则我不能使用RequestDispatcher.forward和sendRedirect,因为它将使在添加sendRedirect作为浏览器之前添加的任何Header值无效将发出新请求。

我尝试使用HttpClient来打开与报表服务器的新Http连接,并添加了Header值,但是当我在chrome浏览器中的Fiddler或HTTP Header间谍中检查它时,在客户端请求对象中看不到任何Header值。我试图从报表服务器捕获响应对象,并在原始请求中设置响应对象,然后在servlet的原始响应对象中设置该对象,以推送到客户端浏览器。但是由于没有在HTTPClient Post请求中设置我的Header值,因此该请求从未得到满足。

以下是用于从我的拦截器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值并将请求传递给报表服务器,以便用户可以访问报表

1 个答案:

答案 0 :(得分:0)

我还被这个问题所阻止。如下代码,但我添加的标头尚未发送到目标服务。顺便说一下,有两种不同的服务

response.setHeader(key, value)
response.sendRedirect(target_url)