web-dev-qa-db-fra.com

Recherche de l'adresse IP de l'utilisateur

J'ai créé une application Web en utilisant JSF 2.0. Je l'ai hébergé sur le site d'hébergement et le serveur du site d'hébergement est basé aux États-Unis.

Mon client veut les détails de l'utilisateur qui a tous accédé au site. Comment puis-je trouver l'adresse IP de l'utilisateur dans JSF?

J'ai essayé avec

    try {
        InetAddress thisIp = InetAddress.getLocalHost();
        System.out.println("My IP is  " + thisIp.getLocalHost().getHostAddress());
    } catch (Exception e) {
        System.out.println("exception in up addresss");
    }

cependant, cela me donne l'adresse IP de mon site uniquement, c'est-à-dire l'adresse IP du serveur.

Quelqu'un pourrait-il me dire comment obtenir l'adresse IP qui a accédé au site Web en utilisant Java?

25
Fahim Parkar

Je suis allé de l'avant avec

HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
    ipAddress = request.getRemoteAddr();
}
System.out.println("ipAddress:" + ipAddress);
61
Fahim Parkar

Une solution plus polyvalente

Version améliorée de la réponse acceptée qui fonctionne même s'il y a plusieurs adresses IP dans les X-Forwarded-For en-tête:

/**
 * Gets the remote address from a HttpServletRequest object. It prefers the 
 * `X-Forwarded-For` header, as this is the recommended way to do it (user 
 * may be behind one or more proxies).
 *
 * Taken from https://stackoverflow.com/a/38468051/778272
 *
 * @param request - the request object where to get the remote address from
 * @return a string corresponding to the IP address of the remote machine
 */
public static String getRemoteAddress(HttpServletRequest request) {
    String ipAddress = request.getHeader("X-FORWARDED-FOR");
    if (ipAddress != null) {
        // cares only about the first IP if there is a list
        ipAddress = ipAddress.replaceFirst(",.*", "");
    } else {
        ipAddress = request.getRemoteAddr();
    }
    return ipAddress;
}
16
Lucio Paiva

Essaye ça...

HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();  
String ip = httpServletRequest.getRemoteAddr();  
4
Kumar Vivek Mitra