獲取請求IP

服務器獲取客戶端或者網頁的請求,獲取IP時須要注意,並非直接服務器

request.getRemoteAddr();

就能夠了,由於一個請求到達服務器以前,通常都會通過一層或者多層代理服務器,好比反向代理服務器將http://192.168.1.10:port/ 的URL反向代理爲http://www.xxx.com/ 的URL時,用request.getRemoteAddr() 方法獲取的IP地址是:127.0.0.1 或 192.168.1.10 ,而並非客戶端的真實IP。但在通過代理服務器以後,請求頭中都會多一些字段,咱們能夠根據這些字段來獲取真實的IP而不是通過代理服務器生成的IP。spa

String ip = request.getHeader("X-Forwarded-For");
if (StringUtils.isNotEmpty(ip) && !"unKnow".equalsIgnoreCase(ip)) {
//屢次反向代理後會有多個ip值,第一個ip纔是真實ip
  String[] ipList = ip.split(",");
  ip = ipList[0];
} else {
  ip = request.getHeader("X-Real-IP");
  if (StringUtils.isEmpty(ip) || "unKnown".equalsIgnoreCase(ip)) {
    ip = request.getRemoteAddr();
  }
}
相關文章
相關標籤/搜索