[JAVA] 클라이언트단 IP 정보
특정 IP 만 허용하도록 로직을 짤 경우가 있다.
이때 웹서버 앞단에 L4 스위치 또는 프록시 서버 등이 있다면 로컬의 IP 가 아닌 스위치 또는 프록시 서버의 IP 를 가지고오게된다.
이렇게 장비들이 앞단에 있을경우 클라이언트 IP 정보를 request Header에 정보를 담아 요청하게 된다. 이에 따른 소스는 아래와 같다.
private String getRealIpAddress(HttpServletRequest request) {
String ipAddress = request.getHeader("X-Forwarded-For");
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("HTTP_CLIENT_IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); }
log.info("point1 {} "+ ipAddress); if(ipAddress.contains(",")) { String [] tmp = ipAddress.split(","); ipAddress = tmp[0].trim(); } log.info("point2 {} "+ ipAddress);
if ("0:0:0:0:0:0:0:1".equals(ipAddress)) { InetAddress localIp = null; try { localIp = InetAddress.getLocalHost(); } catch (UnknownHostException e) { log.error("{}", e); } ipAddress = localIp.getHostAddress(); } return ipAddress; } |