wake-up-neo.net

So übergeben Sie Daten im HTTP-Header, während Sie eine Anforderung in Java umleiten

ist es möglich, einige Daten im HTTP-Header zu übergeben, während eine Anforderung von einem Server an einen anderen umgeleitet wird.

Hier ist mein Szenario , Ich habe einen generischen Filter, über den jede Anforderung weitergeleitet wird. Jetzt leite ich die Anforderung auf der Grundlage einiger Bedingungen mit der API objHttpServletResponse.sendRedirect(strURL) auf einen anderen Server um.

Das Problem ist jedoch, wenn ich einige Daten im Antwortheader wie objHttpServletResponse.setHeader("Key", "Value"); setze. Dies ist auf dem umgeleiteten Server nicht verfügbar.

Meine Fragen sind also

1. Gibt es eine Möglichkeit, einige Daten im Header zu übergeben, während eine Anforderung umgeleitet wird?

2. Wenn nicht, wie können andere Daten gesendet werden, während eine Anforderung umgeleitet wird?

Bitte beachten Sie: einige andere Möglichkeiten, wie 

URL-Parameter verwenden: objHttpServletResponse.sendRedirect(strURL+"?param="+ strParamValue);

oder  

unter Verwendung der Sitzung: HttpSession session = httpRequest.getSession(); session.setAttribute("Key", "Value");

ist nicht was ich erwarte.

16
anij

Die von Ihnen festgelegten Header werden zusammen mit einem Location-Header und einem Statuscode in die Antwort geschrieben, die an den Client gesendet wird. Siehe Umleiten einer Anforderung mithilfe von Servlets und der Methode "setHeader", die nicht funktioniert

Der Client sendet dann eine identische Anfrage an die URL, die Sie im Header Location angegeben haben. Identisch mit der an Sie gesendeten Anfrage.

Sie möchten, dass der Browser einen von Ihnen angegebenen Header zusammen mit der umgeleiteten Anforderung sendet. Haben Sie darüber nachgedacht, einen (Domain-) Cookie-Header hinzuzufügen? Einige Googles lassen mich glauben, dass Cookies, die in einer Weiterleitungsantwort gesetzt wurden, von den meisten Browsern erkannt werden. Siehe http://blog.dubbelboer.com/2012/11/25/302-cookie.html

8
flup

Bitte schauen Sie unter Apache HttpClient nach.

In diesem Beispiel werden der Post-Anfrage mehrere Parameter hinzugefügt:

    String url = "https://selfsolve.Apple.com/wcResults.do";

    HttpClient client = HttpClientBuilder.create().build();
    HttpPost post = new HttpPost(url);

    // add header
    post.setHeader("User-Agent", USER_AGENT);

    List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
    urlParameters.add(new BasicNameValuePair("sn", "C02G8416DRJM"));
    urlParameters.add(new BasicNameValuePair("cn", ""));
    urlParameters.add(new BasicNameValuePair("locale", ""));
    urlParameters.add(new BasicNameValuePair("caller", ""));
    urlParameters.add(new BasicNameValuePair("num", "12345"));

    post.setEntity(new UrlEncodedFormEntity(urlParameters));

    HttpResponse response = client.execute(post);
    System.out.println("Response Code : " 
                + response.getStatusLine().getStatusCode());
2
SparkOn

Das Problem ist, dass die redirect()-Methode der response eine neue Anforderung auslöst, wodurch die vor der Umleitung gesetzten Attribute verloren gehen. Glücklicherweise gibt es immer noch einen fließenden Weg, um das Problem zu lösen.

response.setHeader("Key", "Value");
request.getRequestDispatcher("redirecturl").forward(request, response);

Dann können Sie in Ihrem Ziel tun

response.getHeaders("key")
0
Adindu Stevens

Haben Sie die HTTP-Anfrage/Antwort vom/zum Server überprüft? Sie können eine Reihe von Plugins auf Chrome oder Firefox verwenden, um dies zu überprüfen. Sie können sehen, ob der Wert von Ihrem Server an einen anderen Server übergeben wird oder nicht
Rufen Sie auch den Header mit httpResponse.getHeader ("Key") ab. nicht mit request.getHeader ("key"). Einer meiner Kollegen war vor einigen Tagen mit demselben Problem konfrontiert. Er verwendete die Anfrage, um Header-Werte abzurufen

0
SVashisth

Sie können JS-Weiterleitung verwenden, d. H., Anstatt sendRedirect aufzurufen, geben Sie die HTML-Seite mit eingebettetem Javascript zurück.

Die Verwendung von GET-Parametern ist jedoch wirklich die beste Lösung. Wenn Sie Bedenken haben, dass Benutzer die Parameter manuell ändern, verwenden Sie den MAC-Code, um die Parameter zu schützen.See Message Authentication Code

In der einfachsten Form kann ?p1=1&p2=2&mac={mac value}, where {mac value} = md5('MY_SECRET_KEY' + 'p1=1&p2=2'). Die Empfangsseite kann den MAC neu berechnen und mit dem bereitgestellten vergleichen. Da externe Benutzer 'MY_SECRET_KEY' nicht kennen können, können sie keine gültigen MACs erstellen.

0
Sergey Alaev