스프링에서 사용자(client) IP 가져오기
스프링에서 사용자(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 주소가 표시되는 것을 확인할 수 있다.
출처: http://all-record.tistory.com/168 [세상의 모든 기록]
'JAVA > Java' 카테고리의 다른 글
[JAVA] 이클립스(eclipse) 설치 및 셋팅 (0) | 2019.09.30 |
---|---|
[JAVA] jdk 설치 환경변수 설정 (0) | 2019.09.30 |
openssl AES 모드 : ECB,CBC,CFB,OFB,CTR (0) | 2019.04.02 |
AES 128비트 암호화(ECB 모드, PKCS5Padding) (0) | 2019.04.02 |
MSSQL JAVA 연동하기(JDBC) (2) | 2019.01.03 |
중복 로그인 방지 로직 (1) | 2019.01.03 |
로그인시 아이디가 같은 사용중인 아이디 Session 끊기 (0) | 2019.01.02 |
Java 유료 논쟁, Oracle JDK와 OpenJDK의 차이 정리 (0) | 2018.12.05 |