스프링에서 사용자(client) IP 가져오기
클라이언트의 IP 주소는 HttpServletRequest에 있는 getRemoteAddr( ) 메서드를 이용하여 알아낼 수 있다. 그러나 Proxy, Caching server, Load Balancer 등을 거쳐올 경우 getRemoteAddr( ) 를 이용하여 IP 주소를 가지고 오지 못하게 된다.
이럴경우 별도의 처리를 해주어야 한다.
private String getIp(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); logger.info(">>>> X-FORWARDED-FOR : " + ip); if (ip == null) { ip = request.getHeader("Proxy-Client-IP"); logger.info(">>>> Proxy-Client-IP : " + ip); } if (ip == null) { ip = request.getHeader("WL-Proxy-Client-IP"); // 웹로직 logger.info(">>>> WL-Proxy-Client-IP : " + ip); } if (ip == null) { ip = request.getHeader("HTTP_CLIENT_IP"); logger.info(">>>> HTTP_CLIENT_IP : " + ip); } if (ip == null) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); logger.info(">>>> HTTP_X_FORWARDED_FOR : " + ip); } if (ip == null) { ip = request.getRemoteAddr(); } logger.info(">>>> Result : IP Address : "+ip); return ip; } | cs |
위의 코드를 이용하면 IP를 가져올 수 있다. 그런데 실행을 하고 나서 IP 주소가 이상하다면?
보통 로컬에서 테스트를 하면 IP 주소가 0:0:0:0:0:0:0:1 이렇게 나오게 된다. 보통 우리가 알고 있는 IP 주소라 하면 192.168.1.1 이런 식으로 4개의 숫자로 표시된다. 이런 방식은 IPv4의 방식이고, 0:0:0:0:0:0:0:1 이렇게 표시되는 것이 IPv6의 표시 방식이다.
기본적으로 로컬의 IP 주소를 가져오면 IPv6 형식으로 IP 주소를 가져오게 되므로 별도의 처리를 해야 한다.
IPv4 형식으로 IP주소 가져오기
※ 톰캣 사용자일 경우
STS나 이클립스를 실행시킨다. 그리고 상단 메뉴에서 [Run] - [Run Configurations] 를 선택한다.
왼쪽 메뉴에서 Tomcat Server at localhost 를 선택한다. 그리고 오른쪽 상단에서 (x)= Arguments 메뉴를 클릭한다.
다음으로 VM arguments 부분에 -Djava.net.preferIPv4Stack=true 를 추가하고 Apply를 클릭한다.
다시 소스 코드를 실행해 보면 IPv4 형식으로 IP 주소가 표시되는 것을 확인할 수 있다.
'코딩 > Spring' 카테고리의 다른 글
[Spring] 스프링, MySQL, MyBatis 연동 (9) | 2017.08.06 |
---|---|
[Spring] 스프링 개발환경 설정 (5) | 2017.08.06 |
기초적인 스프링 컨트롤러 1 - 리턴타입 종류 (3) | 2017.05.03 |
Spring MVC 예제 실행 전 준비사항 (1) | 2017.05.02 |
Spring MVC - home.jsp의 동작원리 (22) | 2017.05.01 |