request getHeader(「x-forwarded-for」)リアルIPを取得

2128 ワード

  request     IP: request.getRemoteAddr()    :192.168.0.106
      :request.getRemoteHost()  :abc
request.getHeader("Host")   :192.168.0.1:8080
Web     :request.getServerName()  :192.168.0.1
        :request.getServerPort()  :8080


   JSP ,      IP      :request.getRemoteAddr(),                。
       Apache,Squid                   IP   。
           ,  request.getRemoteAddr()     IP   :127.0.0.1  192.168.1.110,          IP。
      ,                 ,                IP,                          。
        HTTP    ,   X-FORWARDED-FOR  。           IP                。
     index.jsp/ ,                     index.jsp   ,            index.jsp ,
                      ,           index.jsp ,
  index.jsp    request.getRemoteAddr()      IP            ,       IP  。

              IP       :
public String getRemortIP(HttpServletRequest request) { 
if (request.getHeader("x-forwarded-for") == null) { 
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
} 


         IP      :
public String getIpAddr(HttpServletRequest request) { 

    ,             ,X-Forwarded-For       ,    IP ,
               IP ?     X-Forwarded-For     unknown   IP   。
 : X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100     IP : 192.168.1.110

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.getRemoteAddr();
}
return ip;
}