【发布时间】:2014-08-16 19:56:09
【问题描述】:
我正在使用带有 Java Web 应用程序的 Tomcat 服务器。 我需要来自请求的客户端公共 IP 地址。但我无法理解,我使用了 request.getHeader("x-forwarded-for") request.getRemoteAddr() 方法,但我得到客户端机器本地 IP 地址。
【问题讨论】:
标签: java jsp tomcat servlets servlet-filters
我正在使用带有 Java Web 应用程序的 Tomcat 服务器。 我需要来自请求的客户端公共 IP 地址。但我无法理解,我使用了 request.getHeader("x-forwarded-for") request.getRemoteAddr() 方法,但我得到客户端机器本地 IP 地址。
【问题讨论】:
标签: java jsp tomcat servlets servlet-filters
您正在本地网络中运行您的服务器。如果它在野外request.getRemoteAddr()应该做它的工作。
如果您甚至在本地网络中确实需要您的公共 IP,因为它位于路由器后面或使用 NAT 的东西之后,您的本地网络中的公共 IP 可能都相同,这在我看来没有多大意义。即使您想获得公共 IP,也可以使用 ipecho 之类的服务:http://ipecho.net/plain
【讨论】:
如果您在 JSP 中构建 Web 应用程序并希望将客户端的公共 IP 地址发送到服务器,您可以使用带有 JSP 的 JavaScript 来实现。
//JavaScript dynamically created to obtain CLIENT MACHINE'S IP ADDRESS
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://www.telize.com/jsonip?callback=DisplayIP";
document.getElementsByTagName("head")[0].appendChild(script);
//below given function returns CLIENT MACHINE'S IP ADDRESS to the text box
function DisplayIP(response)
{
document.getElementById("clientip").value = response.ip;
}
IP 地址将存储在 clientip 中并将其传递给您发布表单的服务器列表并将其传递给 servlet。
【讨论】: