Dans JSP, la méthode pour obtenir l'adresse IP du client est: request.getReMoteaddr (), qui est valide dans la plupart des cas. Cependant, après avoir passé Apache, Squid et d'autres logiciels proxy inversés, vous ne pouvez pas obtenir la véritable adresse IP du client. Si le logiciel proxy inversé est utilisé, l'adresse IP obtenue en utilisant la méthode request.getRemoteaddr () est: 127.0.0.1 ou 192.168.1.110, pas la véritable IP du client.
Après avoir passé le proxy, puisque une couche intermédiaire est ajoutée entre le client et le service, le serveur ne peut pas obtenir directement l'IP du client et l'application côté serveur ne peut pas revenir directement au client via l'adresse de transfert. Cependant, dans les informations de l'en-tête HTTP sur le transfert de la demande, des informations X-Forwared-for sont ajoutées. Utilisé pour suivre l'adresse IP du client d'origine et l'adresse du serveur demandé par le client d'origine. Lorsque nous accédons à index.jsp /, il n'est pas que notre navigateur accède réellement le fichier index.jsp sur le serveur. Au lieu de cela, le serveur Proxy accède d'abord à l'index.jsp et le serveur proxy renvoie le résultat accessible à notre navigateur. Étant donné que le serveur proxy accède à index.jsp, l'IP obtenu par la méthode request.getRemoteaddr () dans index.jsp est en fait l'adresse du serveur proxy, pas l'adresse IP du client.
Par conséquent, une méthode d'obtention de l'adresse IP réelle du client peut être obtenue:
Public String getReMORTIP (HttpServLetRequest Request) {if (request.geTheader ("x-Forwarded-for") == NULL) {return request.getReMoteadDR (); } return request.getheader ("x-forwarded-for"); }Méthode 2 Pour obtenir la véritable adresse IP du client:
String public getIPADDR (HttpServLetRequest Request) {String ip = request.GetHeader ("x-Forwarded-for"); if (ip == null || ip.length () == 0 || "Unknown" .EqualSIgnoreCase (ip)) {ip = request.geTheader ("proxy-client-ip"); } if (ip == null || ip.length () == 0 || "inconnu" .equalsIgnoreCase (ip)) {ip = request.getheader ("wl-proxy-client-ip"); } if (ip == null || ip.length () == 0 || "Unknown" .EqualsIgnoreCase (ip)) {ip = request.getReMoteadDR (); } return ip; }Cependant, si un proxy inverse à plusieurs niveaux est passé, il y a plus d'une valeur de X-Forwarded-For, mais une série de valeurs IP. Lequel est la vraie IP du côté utilisateur réel?
La réponse consiste à prendre la première chaîne IP valide non sous-vernale dans X-Forwarded-For. comme:
X-Forwarded-For: 192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
La véritable propriété intellectuelle de l'utilisateur est: 192.168.1.110