2008-11-04 9 views
6

Zajmuję się tworzeniem aplikacji internetowej z serwletem java, mam nadzieję uzyskać informacje o użytkowniku ip, dzwoniąc pod numer request.getRemoteAddr() z poziomu processRequest(HttpServletRequest request,HttpServletResponse response).Dlaczego funkcja HttpServletRequest.getRemoteAddr() nie działa w serwletach Java?

Ale zwraca zły adres IP. Ponieważ nie jestem dużą wiedzę o tej dziedzinie, nie wiem co to jest wyświetlanie, może proxy, mam to:

 
RemoteAddr : 127.0.0.1 
RemoteHost : 127.0.0.1 
x-forwarded-for : null 

127.0.0.1 nie jest moje IP.

Jednak gdy przejdę do: http://www.javascriptkit.com/script/script2/displayip.shtml wyświetli się właściwy, ponieważ używam serwletu, nie mam .shtml na mojej dynamicznie generowanej stronie html, co mogę zrobić? I dlaczego skrypt na tej stronie może wyświetlać go poprawnie, gdy nie można tego zrobić?

Dzięki za wszystkie odpowiedzi, mam teraz wskazówkę, po wdrożeniu go na serwerze działa zgodnie z oczekiwaniami. Pokazano poprawny adres.

Ale nawet kiedy rozwijam go na mojej lokalnej maszynie, jak poprosić o wyświetlenie absolutnego IP tak, jakby działał na prawdziwym serwerze? Czy jest to wykonalne?

+0

Kiedy mówisz "zepsuty adres IP", czy adres jest w domenie? Jak źle to jest? Czy możesz podać nam więcej informacji na temat tego, do czego wraca połączenie? –

Odpowiedz

19

Jaki adres IP wyświetla? Domyślam się, że jest jakiś proxy lub coś zmieniającego. (Na przykład ta strona skryptu wyświetlała mój adres IP routera ADSL - nie ten z mojej sieci LAN - z oczywistych powodów).

EDYCJA: Teraz, gdy pokazałeś, że adres IP, który widzisz, to 127.0.0.1 odpowiedź jest dość jasna - widzisz swój adapter zwrotny (tj. skrót do tego samego komputera) prawdopodobnie dlatego, że testujesz na tym samym komputerze, na którym się rozwijasz. Odpowiedź jest całkowicie poprawna.

Wypróbuj za pomocą innego urządzenia, a otrzymasz bardziej przydatny adres IP.

+0

To też było moje pytanie. Po prostu pisałeś szybciej. :) – Herms

4

Sprawdź nagłówek X-Forwarded-For, wywołując request.getHeader ("X-Forwarded-For") i zobacz, co zwraca IP.

+0

Używamy tego nagłówka i jeśli nie jest dostępny, wycofaj się na request.getRemoteAddr() – singhspk

3

Zwrócony adres IP, który wyświetlasz, jest adresem IP lokalnego hosta. Rodzi to pytanie - gdzie testujesz i jak uzyskujesz dostęp do serwletu do testowania?

Jeśli serwlet działa na lokalnej maszynie (deweloperskiej), a także wywołuje ją z przeglądarki na tym samym komputerze, dane wyjściowe są absolutnie poprawne.

Cheers,

-R

1

używasz serwer testowy na komputerze lokalnym i łączące się z nim na http://localhost/. Ponieważ łączysz się z lokalnym interfejsem, źródłem połączenia jest również localhost, aka 127.0.0.1.