본문 바로가기

Programming/JAVA

Client IP 획득 (rrequest.getHeaer, equest.getRemoteAddr)

/**
  * Client IP 반환.
  * @param request
  * @return
  */
 public String getClientIp(HttpServletRequest request) {
  String clientIp = request.getHeader("Proxy-Client-IP");
  if (clientIp == null) {
   clientIp = request.getHeader("WL-Proxy-Client-IP");
   if (clientIp == null) {
    clientIp = request.getHeader("X-Forwarded-For");
    if (clientIp == null) {
     clientIp = request.getRemoteAddr();
    }
   }
  }
  return clientIp;
 }

------------------------------------------------------------------------------------------
웹서버와 Plug-in 으로 구성되어 있는 환경에서는 

웹로직의 "Server"와 "Cluster" 설정에서 "WebLogic Plug-in Enabled"를 

"true"로 설정하여 웹로직에서 Client IP 를 구할때 request.getRemoteAddr() 을 사용합니다. 

고객의 업무에 따라서는 Client IP 와 웹서버의 IP 모두를 필요로 하는 경우도 있습니다. 

물론 웹서버가 두개 이상의 구성을 보일경우 입니다.

이 경우에는 "WebLogic Plug-in Enabled" 를 "true"로 설정해서는 웹서버의 IP 를 구하기 힘듭니다. 

(제 경우에는 구하질 못했습니다.) 설정을 "false"로 합니다.

그리고 request.getRemoteAddr() 을 사용하여 웹서버의 IP 를 구합니다.

문제는 Client IP 인데 request.getHeaer(파라메터)를 이용하여 구할수 있습니다.

Client IP 를 구할수 있는 파라메터에는 아래의 3가지가 있습니다.

request.getHeaer("WL-Proxy-Client-IP")

request.getHeaer("Proxy-Client-IP")

request.getHeaer("X-Forwarded-For")

결론적으로 웹로직에서 "WebLogic Plug-in Enabled"를 "true"로 설정하는 것도 

request 의 Header 값을 강제로 바꾸어 주는 것입니다.

물론 getRemoteAddr 이 Client IP 를 얻기 위한 메소드 이지만, 

웹서버와 Plug-in 을 사용하는 환경에서 웹서버 와 클라이언트의 

IP 정보를 모두 필요로 할 경우에는 위의 방법도 고려해 보시기 바랍니다.


출처 : http://ultteky.egloos.com/10663119