웹 개발을 하다보면 접속하는 사용자의 정보를 확인하기 위해서 CLIENT IP를 수집하는 경우가 있습니다.
하지만 접속하는 클라이언트가 PROXY SERVER를 사용하거나, 내부적으로 LOAD BALANCER를 하고 있다면 접속하는 클라이언트의 실제 IP를 수집하는 것이 아니라 웹 서버에 접속하는 바로 직전의 IP를 수집하게 될 것입니다.

그렇다면 그 정보는 정확한 정보가 아닌 쓰레기 정보라고 할 수 있겠죠?
그래서 접속하는 클라이언트의 실제 IP를 수집하는 방법을 설명 하려고 합니다.

먼저 보편적인 클라이언트 IP를 수집하는 방법입니다.

그렇다면 PROXY SERVER 또는 LOAD BALANCER를 거쳐나온 클라이언트의 IP는 어떻게 구할까요?

대부분의 이런 경우에는 CLIENT IP가 없어지는 것이 아니라 Request의 헤더에 X-FORWARDED_FOR라는 키워드로 정보를 남겨 놓는다고 합니다. 그래서 자바내의 로직을 처리하실 때는 다음과 같이 하시면 됩니다.

위의 자료는 STCreative에서 개발을 하면서 겪었던 일을 기반으로 작성된 자료입니다.
모두 100%정확하다는 편견을 버려주십시요.
확인해 보시고 에러가 발생한다면 디버깅과 함께 해결 방법을 적어주시면 수정하도록 하겠습니다.

출처 : http://blog.stclab.co.kr/?p=6




메소드로 구현 해 놓기


public String getClientIP(HttpServletRequest request) {


    String ip = request.getHeader("X-FORWARDED-FOR"); 

    

    if (ip == null || ip.length() == 0) {
        ip = request.getHeader("Proxy-Client-IP");
    }


    if (ip == null || ip.length() == 0) {
        ip = request.getHeader("WL-Proxy-Client-IP");  // 웹로직
    }


    if (ip == null || ip.length() == 0) {
        ip = request.getRemoteAddr() ;
    }

    

    return ip;

}

Posted by 앗뜨거워 ( @bok3937 ) 앗뜨거

댓글을 달아 주세요