服務器獲取客戶端或者網頁的請求,獲取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(); } }