본문 바로가기
Java & Spring

Java HttpServletRequest 클라이언트 IP 가져오기 (Client IP, 접속자 IP)

by 모닝위즈 2023. 9. 15.
반응형

/**
 * 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 및 주석으로 설명.

댓글