2012-07-27 79 views
6

我需要在JSP頁面中獲取客戶端的IP地址。我嘗試了以下方法:獲取JSP中客戶端的IP地址

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") 

但是,這些方法都沒有返回所需的IP地址。如何在JSP頁面中獲取客戶端的IP地址?

+0

如果您使用自定義標題,請始終命名爲'X- '。 – 2012-07-27 07:30:46

+0

'request.getRemoteAddr()'返回什麼? – Jeshurun 2012-07-27 07:31:04

+0

另請參閱[this](http://stackoverflow.com/q/1423347/473637)問題。 – Jeshurun 2012-07-27 07:32:26

回答

0

你使用反向代理如Apache代理? http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

當在反向代理模式作用(使用ProxyPass指令,例如),mod_proxy_http爲了將信息傳遞給源服務器增加了幾個請求頭。這些標題是:

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

服務器和客戶端之間不使用代理服務器。所有正在使用X-Forwarded-For,X-Forwarded-Host,X-Forwarded-Server的值都沒有使用代理的null原因。 – 2012-07-27 07:38:30

+0

如果您沒有使用任何反向代理,只需使用http servlet API - httpServletRequest.getRemoteHost()和getRemotePOrt()http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html – 2012-07-27 07:39:44

+0

httpServletRequest中沒有任何內容會提供給我客戶端的IP。我檢查了整個API。 – 2012-07-27 07:47:40

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

您可能沒有獲得真正的客戶端IP,如果一個客戶端是一個代理之後,您將獲得代理而不是客戶端的IP地址。但是,代理可能會將請求的客戶端IP包含在特殊的HTTP標頭中。

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

但是,如何在客戶端和請求的服務器之間未配置代理時獲取客戶端的IP地址。 – 2012-07-27 07:45:22

+0

[鏈接](http://stackoverflow.com/questions/1423347/problem-with-jsp-getremoteaddress)看到這篇文章。 – kinaesthesia 2012-07-27 07:47:56

+0

輸出就像0:0:0:0:0:0:0:1你有什麼想法爲什麼? – 2016-04-05 05:48:40

3

您的應用程序服務器位於負載均衡器,代理服務器還是Web服務器之後?只是一個例子; F5負載均衡器暴露在客戶端的IP地址與「rlnclientipaddr」頭:

request.getHeader("rlnclientipaddr"); 
2

獲取客戶端的IP地址,我用下面的方法

<% 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(); 
     } 
     %> 

希望這有助於 請留下反饋。