我需要在GWT/GAE(Java)应用程序中捕获客户端的IP地址.由于GAE不支持完整的java.net API,我无法执行下面的代码段代码.任何人都可以提出可靠的方法来达到同样的目
for (final Enumerationen = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { final NetworkInterface intf = en.nextElement(); for (final Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { final InetAddress ip = enumIpAddr.nextElement(); if (!ip.isLoopbackAddress() && !ip.isLinkLocalAddress() && !ip.isAnyLocalAddress()) { return ip.getHostAddress().toString(); } } }
对于Python版本,我们可以:
os.environ['REMOTE_ADDR']
要么
String ip = self.request.remote_addr;
但是什么是Java等价物?
好的,我知道了.在你的Servlet应该扩展RemoteServiceServlet
这样做:
final String ip = getThreadLocalRequest().getRemoteAddr();
例如,如果您在代理服务器后面,如果您使用ProxyPass和ProxyPassReverse,您会发现这有用:
this.getThreadLocalRequest().getHeader("X-FORWARDED-FOR")