Get it on Google Play
20-01-2018
 

Formación y desarrollo avanzado: Obtener la IP real de una petición en Liferay

IP Request Liferay

IP Request Liferay

En ocasiones, nos interesa trabajar con la IP que nos hace las peticiones a nuestro portal. Bien porque nos interesa saber el país(Ver el post “Obtener el nombre del país desde una IP en aplicaciones JavaEE y Liferay“), bien porque nos interesa saber si la petición proviene de Tor(Ver el post “Seguridad IT: Saber si una IP pertenece a la red Tor“) o cualquier historia relacionada con funcionalidades avanzadas de negocio o la seguridad.

En Liferay podemos encontrar la IP desde la que nos llega una petición de la siguiente manera:

HttpServletRequest request = PortalUtil.getHttpServletRequest( portletRequest );

String ip=request.getRemoteAddr();

El problema, es que de esta manera si tenemos un proxy(Algo muy habitual) la IP que nos llega es la del proxy. Normalmente, los proxys o balanceadores de carga lo que nos hacen es inyectar la IP del cliente en la cabecera de la petición. De esta manera, normalmente, no encontraremos la IP del cliente en la cabecera ‘x-forwarded-for’ y la podremos leer con esta función:

public static String getIp(PortletRequest req) {
		HttpServletRequest request = PortalUtil.getHttpServletRequest(req);
		HttpServletRequest originalServletRequest = PortalUtil.getOriginalServletRequest(request);
		String ipAddress=originalServletRequest.getHeader("x-forwarded-for");
		
		return ipAddress;
		}

Si queréis configurar Nginx, normalmente se añade esto a la configuración para que nos inyecte la IP del cliente:

		proxy_set_header        Host            $host;
		proxy_set_header        X-Real-IP       $remote_addr;
		proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

Tenéis mas información sobre como configurar un balanceador de carga Nginx para Liferay(Con esto funcionando) en el post “Configurando un balanceador para Liferay con Nginx+Seguridad TLS+Docker“.

Si te ha servido, por favor comparte

Interesado en formación Liferay?

 

Leave a Reply