특정 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; } |
'백앤드 이야기 > JAVA&Spring' 카테고리의 다른 글
[JAVA] Paging 모델 및 소스 (Mybatis) (0) | 2019.07.07 |
---|---|
[JAVA] 높은 응집도와 낮은 결합도 (0) | 2019.07.04 |
[JAVA] 생성자 (0) | 2019.04.14 |
[JAVA] 오버로딩, 오버라이딩 (0) | 2019.04.14 |
[JAVA] 바깥 for문 종료하기 (0) | 2018.11.18 |
댓글