I have a need to capture IP address of the client in my GWT/GAE (Java) application. Since GAE does not support full set of java.net APIs I cannot do code such as snippet below. Can anyone suggest reliable way of achieving the same?
for (final Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
final NetworkInterface intf = en.nextElement();
for (final Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
final InetAddress ip = enumIpAddr.nextElement();
if (!ip.isLoopbackAddress() && !ip.isLinkLocalAddress() && !ip.isAnyLocalAddress()) {
return ip.getHostAddress().toString();
}
}
}
For Python version one can do:
os.environ['REMOTE_ADDR']
or
String ip = self.request.remote_addr;
But what would be a Java equivalent?
OK - got it. In your Servlet which should extend RemoteServiceServlet
do this:
final String ip = getThreadLocalRequest().getRemoteAddr();
If you are behind a proxy, for example, if you use ProxyPass and ProxyPassReverse you could find useful this:
this.getThreadLocalRequest().getHeader("X-FORWARDED-FOR")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With