728x90
Client의 IP를 가져오는 방법이 무엇이 있을까?
개발 프로젝트를 하다보면 client의 IP를 필요한 요구사항이 존재한다.
대부분의 HttpServletRequest 에서 getRemoteAddr로 찾아온다.
그런데 웹 서버나 WAS (Web Application Server) 앞단에 L4 같은 로드 밸런싱이나 Proxy Server, (웹로직 or 톰캣) 커넥터 등이 있는 경우가 있다.
그런데! 이런 구조에서 많이 발생하는 것이 getRemoteAddr 로 IP를 가져오면 127.0.0.1을 가져오는 것을 볼 수 있다.
또는 요청에 대해 보낸 후에 가공하여 client 에 재전송하게 되고 그로 인해 IP를 얻을 경우 L4나 Proxy의 IP를 얻게 되는 결과가 생길 수도 있다.
위키를 확인하고 샘플 소스를 찾아보니 기본적으로 아래의 코드를 사용한다고 한다.
public static String getRemoteHost (HttpServletRequest request)
{
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.getHeader("HTTP_CLIENT_IP");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getRemoteAddr();
return ip;
}
- 오늘의 한 줄 -
네트워크는 어렵다...;;;
공감과 구독은 저에게 크나큰 힘이 됩니다♡
함께 보면 좋은 글
위키참조 : https://en.wikipedia.org/wiki/X-Forwarded-For
728x90
'IT > PROGRAMING' 카테고리의 다른 글
[코딩] Google 스타일 가이드 (0) | 2023.02.14 |
---|---|
[JAVA] Timestamp.before 메소드 (0) | 2020.12.04 |
[JAVA] LDAP, AD (Active Directory) 연결 가이드! (0) | 2020.10.30 |
[JAVA] Restful API 호출 가이드 예제 (0) | 2020.10.29 |
JAVA. DBMS 연동을 위한 JDBC (Java Data Base Connectivity)활용 (0) | 2012.02.07 |