😏 자바에서 IP주소를 구하는 방법
String ip = request.getRemoteAddr();
🤧하지만 이것만 쓰면 안된다~!
보통 보안 문제로 방화벽등을 거쳐 요청이나 응답이 가공되어 나가고 들어오기 때문에
getRemoteAddr()만 쓸경우 프록시 서버나 엉뚱한 ip를 얻을 수 있게됩니다.
이 문제를 해결하기 위해 등장한 것이 X-Forwarded-For 헤더
developer.mozilla.org/ko/docs/Web/HTTP/Headers/X-Forwarded-For
: HTTP 프록시나 로드 밸런서를 통해 웹 서버에 접속하는클라이언트의 원 IP 주소를 식별하는 표준 헤더로 쓰이며,
실제 접속 IP를 찾아 낼 수 있다.
🎈 그래서 이 헤더에 값이 있는지 없는지 확인한 후 없으면 getRemoteAddr() 를 쓰면된다.
근데 또 다른 헤더를 사용하는 것들도 있기 때문에 헤더마다 값 있는지 확인해서 실제 IP를 찾아줘야함
public static String getClientIP(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("getRemoteAddr : "+ip);
}
logger.info("Result : IP Address : "+ip);
return ip;
}
🌟 이클립스로 로컬에서 돌려봤더니 IP주소가 0:0:0:0:0:0:0:1가 찍히더라
이건 IPV6의 주소를 가져와서 그렇다.
IPV4로 보면 익숙한 127.0.0.1가 맞음.
이클립스에서 톰캣실행시 세팅해주면 IPV6로 가져온다
메뉴RUN > Run Configurations > Arguments >에서 -Djava.net.preferIPv4Stack=true 추가해주면됨
'개발공부 > 웹개발' 카테고리의 다른 글
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (~39p) (0) | 2022.03.13 |
---|---|
[JSTL] GET, POST로 받은 파라미터 바로 사용하기 (0) | 2021.04.28 |
[spring] java 파일에서 화면에 alert 띄우기 (0) | 2021.02.25 |
[Spring] smtp 사용 mail보내기 구현 (0) | 2021.02.05 |
[Mybatis] 파라미터가 null일 경우에 NullPointerException? (0) | 2021.01.29 |