簡體   English   中英

在JSP中獲取客戶端的IP地址

[英]Get IP address of client in JSP

我需要在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地址?

要獲取客戶端的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();  
        }
        %>

希望這有幫助,請留下反饋。

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

如果客戶端在代理后面,您可能無法獲得真正的客戶端IP,您將獲得代理的IP而不是客戶端。 但是,代理可以在特殊的HTTP頭中包括請求客戶端IP。

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

您的應用程序服務器是否位於負載均衡器,代理或Web服務器之后? 只是一個例子; F5負載均衡器使用“rlnclientipaddr”標頭公開客戶端IP地址:

request.getHeader("rlnclientipaddr");

你使用像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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM