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?
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);
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;
}
Essaye ça...
HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
String ip = httpServletRequest.getRemoteAddr();