“X-Forwarded-For” só não é null quando você passa por um proxy, como o Squid ou o Microsoft ISA Server. É por isso que você precisa checar o X-Forwarded-For e o getRemoteHost.
Por exemplo, digamos que você esteja recebendo uma requisição de um browser de uma empresa cuja rede interna tem os endereços 10.100.. (por exemplo, 10.100.145.55) e que se conecta à Internet por um Speedy Empresarial cujo IP é 200.155.17.200. “getRemoteHost” vai lhe retornar 200.155.17.200 e “X-Forwarded-For” vai lhe retornar “10.100.145.55” - isso se a requisição passar por um proxy.)