In JSP lautet die Methode, um die IP -Adresse des Clients zu erhalten. Nachdem Sie jedoch Apache, Squid und andere Reverse -Proxy -Software übergeben haben, können Sie die reale IP -Adresse des Clients nicht erhalten. Wenn die Reverse -Proxy -Software verwendet wird, ist die IP -Adresse, die mit Request.GetRemoteaddr () Methode erhalten wurde.
Nachdem der Proxy bestanden hat, kann der Server, da eine Zwischenschicht zwischen dem Client und dem Dienst hinzugefügt wird, die IP des Clients nicht direkt und die serverseitige Anwendung nicht direkt über die Weiterleitungsadresse direkt zum Client zurückkehren. In den HTTP-Header-Informationen zur Weiterleitung der Anfrage werden jedoch X-forward-for-Informationen hinzugefügt. Wird verwendet, um die ursprüngliche Client -IP -Adresse und die vom ursprünglichen Client angeforderte Serveradresse zu verfolgen. Wenn wir auf Index.jsp/zugreifen, gilt unser Browser nicht tatsächlich auf die Index.jsp -Datei auf dem Server. Stattdessen greift der Proxyserver zuerst index.jsp zu, und der Proxy -Server gibt das zugegriffene Ergebnis in unseren Browser zurück. Da der Proxy -Server auf Index.jsp zugreift, ist die IP -Methode in Index.jsp tatsächlich die Adresse des Proxy -Servers, nicht die IP -Adresse des Clients.
Daher kann eine Methode zur Erlangung der realen IP -Adresse des Clients erhalten werden:
public String getremortip (httpServletRequest-Anforderung) {if (request.getheader ("x-forward-for") == null) {return request.getRemoteaddr (); } return request.getheader ("x-forward-for"); }Methode 2, um die reale IP -Adresse des Clients zu erhalten:
public String getiPaddr (httpServletRequest-Anforderung) {String ip = request.getheader ("x-forward-for"); if (ip == null || ip.length () == 0 || "unbekannt" .EqualSignoreCase (ip)) {ip = request.getheader ("proxy-client-ip"); } if (ip == null || ip.length () == 0 || "unbekannt" .EqualSignoreCase (ip)) {ip = request.getheader ("wl-proxy-client-ip"); } if (ip == null || ip.length () == 0 || "unbekannt" .EqualSignoreCase (ip)) {ip = request.getRemoteaddr (); } return ip; }Wenn jedoch ein Multi-Level-Reverse-Proxy übergeben wird, gibt es mehr als einen Wert von X-Forward-für, aber eine Reihe von IP-Werten. Welches ist die eigentliche IP der realen Benutzerseite?
Die Antwort lautet, die erste nicht unbekannte IP-Zeichenfolge in X-Forward-für zu übernehmen. wie:
X-forwarded-for: 192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
Die tatsächliche IP des Benutzers ist: 192.168.1.110