반응형
/**
* HttpServletRequest request 를 전달받아 클라이언트(접속자) IP를 가져오는 함수
*
* @param request HttpServletRequest
* @return ip String
* */
@Deprecated
public static String getRealClientIP(HttpServletRequest request) {
//일반적으로 클라이언트와 서버 사이의 프록시나 로드 밸런서를 통해 전달된 클라이언트 IP 주소
String ip = request.getHeader("X-Forwarded-For");
//프록시를 통해 전달된 클라이언트의 IP 주소
ip = (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
?request.getHeader("Proxy-Client-IP"):ip;
//웹로직 서버를 통해 전달된 클라이언트의 IP 주소
ip = (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
?request.getHeader("WL-Proxy-Client-IP"):ip;
//HTTP 클라이언트를 통해 전달된 클라이언트의 IP 주소
ip = (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
?request.getHeader("HTTP_CLIENT_IP"):ip;
//다른 프록시를 통해 전달된 클라이언트의 IP 주소
ip = (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
?request.getHeader("HTTP_X_FORWARDED_FOR"):ip;
//일부 프록시나 서버 설정에서 사용되는 실제 클라이언트의 IP 주소 Case 1
ip = (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
?request.getHeader("X-Real-IP"):ip;
//일부 프록시나 서버 설정에서 사용되는 실제 클라이언트의 IP 주소 Case 2
ip = (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
?request.getHeader("X-RealIP"):ip;
//원격 클라이언트의 IP 주소를 나타내는 표준 헤더
ip = (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
?request.getHeader("REMOTE_ADDR"):ip;
//원격 클라이언트의 IP 주소
ip = (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
?request.getRemoteAddr():ip;
return ip;
}
자세한 내용은 소스코드 속 javaDoc 및 주석으로 설명.
댓글