2012-07-27 5 views
6

Ich muss die IP-Adresse des Clients auf der JSP-Seite abrufen. Ich habe die folgenden Möglichkeiten versucht:IP-Adresse des Clients in JSP abrufen

request.getRemoteAddr() 
request.getHeader("X_FORWARDED_FOR") 
request.getHeader("HTTP_CLIENT_IP") 
request.getHeader("WL-Proxy-Client-IP") 
request.getHeader("Proxy-Client-IP") 
request.getHeader("REMOTE_ADDR") 

Keine dieser Möglichkeiten jedoch zurückgegeben die gewünschte IP-Adresse. Wie bekomme ich die IP-Adresse des Clients auf der JSP-Seite?

+0

Wenn Sie benutzerdefinierte Header verwenden, benennen Sie sie immer 'X- '. –

+0

Was gibt 'request.getRemoteAddr()' zurück? – Jeshurun

+0

Siehe auch [this] (http://stackoverflow.com/q/1423347/473637) Frage. – Jeshurun

Antwort

0

Verwenden Sie Reverse-Proxy wie Apache-Proxy? http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

Wenn in einem Reverse-Proxy-Modus (mit dem Proxypass, zum Beispiel) wirkt, fügt mod_proxy_http mehr Request-Header, um Informationen an den Ursprungsserver zu übergeben. Diese Header sind:

X-Forwarded-For 
The IP address of the client. 
X-Forwarded-Host 
The original host requested by the client in the Host HTTP request header. 
X-Forwarded-Server 
The hostname of the proxy server. 
+0

Kein Proxy wird zwischen Server und Client verwendet. Alle Werte, die X-Forwarded-For, X-Forwarded-Host, X-Forwarded-Server verwenden, geben null, weil Proxy nicht verwendet wird. –

+0

Wenn Sie keinen Reverse Proxy verwenden, verwenden Sie einfach die http Servlet API - httpServletRequest.getRemoteHost() und getRemotePort() http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html –

+0

Nichts ist in httpServletRequest vorhanden, das mir die IP des Clients zur Verfügung stellt. Ich habe die gesamte API überprüft. –

3
<% 
out.print(request.getRemoteAddr()); 
out.print(request.getRemoteHost()); 
%> 

Sie nicht die reale Client-IP bekommen kann, wenn eine der Client hinter einem Proxy ist, werden Sie die IP-Adresse des Proxy bekommen und nicht auf dem Client. Der Proxy kann jedoch die anfordernde Client-IP in einem speziellen HTTP-Header enthalten.

<% 
out.print(request.getHeader("x-forwarded-for")); 
%> 
+0

Aber wie die IP des Clients zu erhalten, wenn kein Proxy zwischen Client und angeforderten Server konfiguriert ist. –

+0

[link] (http://stackoverflow.com/questions/1423347/problem-with-jsp-getremoteaddress) Siehe diesen Beitrag. – kinaesthesia

+0

Ausgabe kommt wie 0: 0: 0: 0: 0: 0: 0: 1 Sie haben eine Ahnung warum? –

3

Ist Ihr Anwendungsserver hinter einem Load Balancer, einem Proxy oder einem Webserver? Nur ein Beispiel; F5 Load-Balancer-Adresse der Client-IP setzt mit dem "rlnclientipaddr" header:

request.getHeader("rlnclientipaddr"); 
2

Um IP-Adresse des Clients zu erhalten, habe ich verwendet, um die folgende Methode

<% String ip = request.getHeader("X-Forwarded-For"); 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getHeader("Proxy-Client-IP"); 
     } 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getHeader("WL-Proxy-Client-IP"); 
     } 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getHeader("HTTP_CLIENT_IP"); 
     } 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getHeader("HTTP_X_FORWARDED_FOR"); 
     } 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getRemoteAddr(); 
     } 
     %> 

hoffte, das hilft, bitte Lassen Sie ein Feedback zurück.

Verwandte Themen