2008-11-04 9 views
6

Je suis en train de développer une application web avec Java servlet, j'espère obtenir l'information ip de l'utilisateur en appelant request.getRemoteAddr() depuis l'intérieur processRequest(HttpServletRequest request,HttpServletResponse response).Pourquoi HttpServletRequest.getRemoteAddr() ne fonctionne pas dans le servlet Java?

Mais il renvoie une adresse IP incorrecte. Depuis que je ne suis pas très bien informé sur ce domaine, je ne sais pas ce qu'il affiche, peut-être un proxy, je suis arrivé ceci:

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

127.0.0.1 est pas mon IP.

Pourtant quand je vais à: http://www.javascriptkit.com/script/script2/displayip.shtml il affichera le bon, puisque j'utilise servlet, je n'ai pas le fichier .shtml à ma page html générée dynamiquement, que puis-je faire? Et pourquoi le script sur ce site peut l'afficher correctement alors que request.getRemoteAddr() ne peut pas le faire?

Merci pour toutes les réponses, j'ai un indice maintenant, après le déployer sur le serveur, cela fonctionne comme prévu. Montré la bonne adresse.

Mais même quand je le développe sur ma machine locale, comment lui demander d'afficher l'adresse IP absolue comme si elle fonctionnait sur un vrai serveur? Ou est-ce faisable?

+0

Lorsque vous dites «mauvaise adresse IP», l'adresse est-elle dans votre domaine? Quel est le problème? Pouvez-vous nous donner plus d'informations sur le retour de l'appel? –

Répondre

19

Quelle adresse IP affiche-t-elle? Je suppose qu'il y a un proxy ou quelque chose qui change les choses. (Par exemple, cette page de script affichait l'adresse IP de mon routeur ADSL - pas celle de mon réseau local - pour des raisons évidentes.)

EDIT: Maintenant que vous avez montré que l'adresse IP que vous voyez est 127.0.0.1 la réponse est assez claire - vous voyez votre adaptateur de bouclage (c.-à-d. le raccourci vers la même machine) sans doute parce que vous testez sur la même machine que vous développez. La réponse est entièrement correcte. Essayez-le à partir d'un autre ordinateur et vous obtiendrez une adresse IP plus utile.

+0

Cela allait être ma question aussi. Vous venez de taper plus vite. :) – Herms

4

Vérifiez l'en-tête X-Forwarded-For en appelant request.getHeader ("X-Forwarded-For") et vérifiez l'adresse IP renvoyée.

+0

Nous utilisons cet en-tête et s'il n'est pas disponible retombe sur request.getRemoteAddr() – singhspk

3

L'adresse IP renvoyée que vous affichez est l'adresse IP locale. Cela soulève la question: où testez-vous et comment accédez-vous au servlet pour tester?

Si vous exécutez la servlet sur votre machine (de développement) locale, et que vous l'appelez depuis un navigateur sur la même machine, cette sortie est absolument correcte.

Cheers,

R

1

que vous utilisez votre serveur de test sur votre ordinateur local et connexion sur http://localhost/. Puisque vous vous connectez sur l'interface locale, la source de la connexion est également localhost, alias 127.0.0.1.

1

Si vous appelez votre servlet en utilisant http://localhost:8080/servlet, vous obtiendrez généralement "localhost" en tant qu'adresseur distant. Si vous utilisez le nom de votre machine, c'est-à-dire http://yourmachine/servlet, vous obtiendrez habituellement l'adresse "correcte".

+0

Cela n'a pas fonctionné! – Moesio

Questions connexes