1. 程式人生 > >獲取請求IP

獲取請求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。

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