java如何根據(jù)HttpServletRequest獲取IP地址
java根據(jù)HttpServletRequest獲取IP地址
解決辦法:
以下整理了各個(gè)代理服務(wù)器自己開(kāi)發(fā)的轉(zhuǎn)發(fā)服務(wù)請(qǐng)求頭,這些請(qǐng)求頭都不是標(biāo)準(zhǔn)的http請(qǐng)求頭,不一定所有的代理都會(huì)帶上這些請(qǐng)求頭,所以通過(guò)這方式只能盡可能的獲取到真實(shí)ip,但不能保證一定可以獲取到真實(shí)ip,而且代理服務(wù)器請(qǐng)求頭中獲取的ip是可偽造的。
參數(shù):
X-Forwarded-For:Squid 服務(wù)代理Proxy-Client-IP:apache 服務(wù)代理WL-Proxy-Client-IP:weblogic 服務(wù)代理HTTP_CLIENT_IP:有些代理服務(wù)器X-Real-IP:nginx服務(wù)代理
方法一
public static String getIPAddress(HttpServletRequest request) {
String ip = null; //X-Forwarded-For:Squid 服務(wù)代理
String ipAddresses = request.getHeader("X-Forwarded-For");
if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { //Proxy-Client-IP:apache 服務(wù)代理
ipAddresses = request.getHeader("Proxy-Client-IP");
}
if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { //WL-Proxy-Client-IP:weblogic 服務(wù)代理
ipAddresses = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { //HTTP_CLIENT_IP:有些代理服務(wù)器
ipAddresses = request.getHeader("HTTP_CLIENT_IP");
}
if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { //X-Real-IP:nginx服務(wù)代理
ipAddresses = request.getHeader("X-Real-IP");
} //有些網(wǎng)絡(luò)通過(guò)多層代理,那么獲取到的ip就會(huì)有多個(gè),一般都是通過(guò)逗號(hào)(,)分割開(kāi)來(lái),并且第一個(gè)ip為客戶端的真實(shí)IP
if (ipAddresses != null && ipAddresses.length() != 0) {
ip = ipAddresses.split(",")[0];
} //還是不能獲取到,最后再通過(guò)request.getRemoteAddr();獲取
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
ip = request.getRemoteAddr();
}
return ip;
}方法二
public static String getIpAddr(HttpServletRequest request)
{
if (request == null)
{
return "unknown";
}
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("X-Forwarded-For");
}
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("X-Real-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getRemoteAddr();
}
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : EscapeUtil.clean(ip);
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot請(qǐng)求發(fā)送與信息響應(yīng)匹配實(shí)現(xiàn)方法介紹
這篇文章主要介紹了SpringBoot請(qǐng)求發(fā)送與信息響應(yīng)匹配實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10
WebUploader客戶端批量上傳圖片 后臺(tái)使用springMVC
這篇文章主要為大家詳細(xì)介紹了WebUploader客戶端批量上傳圖片,后臺(tái)使用springMVC接收實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
Java簡(jiǎn)單計(jì)時(shí)的實(shí)現(xiàn)案例(可以用來(lái)限時(shí)循環(huán))
這篇文章主要介紹了Java簡(jiǎn)單計(jì)時(shí)的實(shí)現(xiàn)案例(可以用來(lái)限時(shí)循環(huán)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08

