En JSP, la méthode pour obtenir l'adresse IP du client est : request.getRemoteAddr() Cette méthode est efficace dans la plupart des cas. Cependant, la véritable adresse IP du client ne peut pas être obtenue via des logiciels de proxy inverse tels qu'Apache et Squid. Si un logiciel proxy inverse est utilisé, l'adresse IP obtenue à l'aide de la méthode request.getRemoteAddr() est : 127.0.0.1 ou 192.168.1.110, et non la véritable IP du client.
Après avoir transité par le proxy, puisqu'une couche intermédiaire est ajoutée entre le client et le service, le serveur ne peut pas obtenir directement l'adresse IP du client et l'application côté serveur ne peut pas renvoyer directement l'adresse de la requête transmise au client. Cependant, les informations X-FORWARDED-FOR sont ajoutées aux informations d'en-tête HTTP de la requête transférée. Utilisé pour suivre l'adresse IP du client d'origine et l'adresse du serveur demandée par le client d'origine. Lorsque nous accédons à index.jsp/, ce n'est pas réellement notre navigateur qui accède réellement au fichier index.jsp sur le serveur. Au lieu de cela, le serveur proxy accède d'abord à index.jsp, et le serveur proxy nous renvoie les résultats consultés. étant donné que le serveur proxy accède à index.jsp, l'adresse IP obtenue via la méthode request.getRemoteAddr() dans index.jsp est en fait l'adresse du serveur proxy, pas l'adresse IP du client.
Nous pouvons donc proposer la première méthode pour obtenir la véritable adresse IP du client :
chaîne publique getRemortIP (requête HttpServletRequest) {
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 :
chaîne publique getIpAddr (requête HttpServletRequest) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "inconnu".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 || "inconnu".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
renvoyer l'adresse IP ;
}
Cependant, si un proxy inverse à plusieurs niveaux est transmis, la valeur de X-Forwarded-For n'est pas seulement une, mais une série de valeurs IP. Laquelle est la véritable adresse IP du vrai client ?
La réponse est de prendre la première chaîne IP valide non inconnue dans X-Forwarded-For. comme:
X-Transféré-Pour : 192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
La véritable adresse IP de l’utilisateur est : 192.168.1.110