sábado, 24 de mayo de 2014

Obtener el IP cliente con java en un esquema HA, con proxy o balanceador de carga

Eventualmente, se puede usar el comando servletRequest.getRemoteAddr() para recuperar la direccion IP del cliente que accede a nuestra aplicación java web de la siguiente manera:

 
   String ipAddress = request.getRemoteAddr();


Pero, si el usuario se conecta via un servidor proxy (ya sea de software o hardware) o en un esquema de alta disponibilidad considerando un balanceador de carga, el código original devolvera el ip del balanceador, router o proxy, no el ip del cliente original conectado.



Para resolver este problema, se debe recuperar la direccion IP del encabezado de la peticion HTTP mas conocida como “X-Forwarded-For (XFF)“ De la siguiente manera:

            
   //el cliente esta conectandose a traves de algun otro equipo?
   String ipAddress = request.getHeader("X-FORWARDED-FOR");  
   if (ipAddress == null) {  
    ipAddress = request.getRemoteAddr();  
   }


Hasta la próxima!

1 comentario:

  1. Si se utiliza protocolo SOAP la implementación del "X-FORWARDED-FOR" se podría implementar para obtener la ip de la petición original y no la del balanceador? o es diferente?

    ResponderEliminar