2012-09-19 6 views
5

Tengo una aplicación de servlet Java ejecutándose dentro de Tomcat, hay un comando de administración del que solo quiero poder ejecutar la máquina misma (o posiblemente mi propia PC también) por razones de seguridad. Así que para cumplir esta verifico la dirección remota del HttpServletRequest que recibo, pero siempre vuelve 127.0.0.1 a pesar de que la solicitud no está llegando desde el host local¿Por qué request.getRemoteAddr(). Es igual a ("127.0.0.1") al acceder desde una máquina remota

¿Por qué es esto, puede arreglar lo que o hay una forma alternativa de ejecutar mi comando de administración solo desde el servidor.

+0

¿Puede por favor pegar parte de su código y explicar dónde está tratando de realizar este control? – Scis

+2

¿hay algo delante del tomcat en la máquina en la que se está ejecutando (por ejemplo, nginx) que reenvía la solicitud? Intente echar un vistazo al encabezado 'X-Forwarded-For'. –

+0

@Jonas Adler, gracias sí el valor x-forward-for cuando corro desde el servidor en contraposición a mi homepc es diferente (aunque el valor cuando corro desde mi PC casera no coincide con el de mi página principal), así que supongo que debería compruebe el valor de x-forward-for en su lugar y restrinja el acceso a mi máquina servidor. –

Respuesta

3

Primero compruebe si la solicitud tiene el encabezado 'X-Forwarded-For'. Si se establece el encabezado, la primera dirección IP en él debería ser la que está buscando. Si el encabezado está vacío request.getRemoteAddr() debe devolver la dirección IP correcta.

Wiki para 'X-reenviado-A': http://en.wikipedia.org/wiki/X-Forwarded-For

Tenga en cuenta que no se puede estar 100% seguro de que obtendrá la IP correcta así desde reenvío de los casos no se ven obligados a establecer el 'X-reenviado-A 'encabezado.

Cuestiones relacionadas