Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从用java开发的web应用程序的http请求中检索源系统的ip地址?_Java_Http_Spring Mvc_Servlets_Tomcat7 - Fatal编程技术网

如何从用java开发的web应用程序的http请求中检索源系统的ip地址?

如何从用java开发的web应用程序的http请求中检索源系统的ip地址?,java,http,spring-mvc,servlets,tomcat7,Java,Http,Spring Mvc,Servlets,Tomcat7,我正在尝试使用java(Spring mvc)从HttpServletRequest对象检索ip地址。我的几个系统在lan中连接的ip地址不同。我能够在一个系统中托管我的web应用程序(使用ApacheTomcat7),并在另一个系统中访问该web应用程序。 我尝试使用下面的代码通过从不同系统的浏览器触发url从http请求头检索IP地址。 但我只能看到值127.0.0.1或localhost:8080 request.getHeader("X-FORWARDED-FOR"); // retu

我正在尝试使用java(Spring mvc)从HttpServletRequest对象检索ip地址。
我的几个系统在lan中连接的ip地址不同。我能够在一个系统中托管我的web应用程序(使用ApacheTomcat7),并在另一个系统中访问该web应用程序。 我尝试使用下面的代码通过从不同系统的浏览器触发url从http请求头检索IP地址。
但我只能看到值127.0.0.1或localhost:8080

request.getHeader("X-FORWARDED-FOR");  // returns null
request.getRemoteAddr(); // returns 127.0.0.1

Enumeration headerNames = request.getHeaderNames();
    while (headerNames.hasMoreElements()) {
        String key = (String) headerNames.nextElement();
        String value = request.getHeader(key);
        logger.info("1key: "+key+" 1value: "+value);
    }
//(along with other values, i get) ip value as localhost:8080 

我认为上面代码显示的ip是启动应用程序的系统的ip。

假设有5个系统
系统1-ip:172.22.16.1(主机系统)
系统2-ip:172.22.16.2
系统3-ip:172.22.16.3
系统4-ip:172.22.16.4
系统5-ip:172.22.16.5

当我从system 5访问web app时,我需要捕获system 5的ip地址,即172.22.16.5。但就我而言,我只得到127.0.0.1

请让我知道这里的问题是什么,为什么我看不到发出请求的IP地址,我应该怎么做才能得到我需要的输出

更新

虽然我没有解决根本的问题,但我能够找出问题的原因(浏览评论)。讨论有助于

一种解决方案是向方法中添加
HttpServletRequest
request,然后使用Servlet API,如下所示:

System.out.println(request.getRemoteAddr());

如果您的最终目标是将应用程序的访问限制为只访问给定的网络,那么您应该通过服务器和网络配置来实现这一点。其中一个示例是使用虚拟主机配置apache HTTPD服务器,将访问限制为仅访问给定网络:

打开httpd.conf文件:

vi/etc/httpd/conf/httpd.conf定位目录节(例如/var/www/sub/payroll),并将其设置如下: 命令允许,拒绝来自的允许 192.168.1.0/24允许从127开始

或者,您可以将tomcat配置为仅在“本地”IP上的服务器,因为我假定您在NAT上,并且您的服务器的IP类似于192.168.1.11


此外,默认情况下,您的应用程序应该只对本地网络可见,您通常应该进行一些额外的配置和路由,以使外部用户可以看到它。

然后您从同一系统调用该系统。如果您在system5上,请致电system5,它将是localhost.@M.Deinum抱歉,我听不懂您的文字。我的问题正是我在帖子中提到的。我已经在system 1上托管了该应用程序,并且正在从system 5访问该应用程序。你能告诉我我犯了什么错误吗?那么系统1上有一个代理。将返回客户端或最后一个代理的远程地址(由javadoc指定)。所以我想问题在于你的主机所面临的问题。这里的问题是(通常)一台机器会有多个ip地址。我怀疑您想要ip地址是有目的的——例如,区分哪台机器为请求提供服务。@JohnCampbellJr该web应用程序应该只能在LAN网络上访问。在我看来,这个问题应该重新表述,并可能分配到网络/服务器配置类别。我在程序中使用HttpServletRequest对象。但我没有得到我在帖子中提到的预期结果。谢谢你。我想这将有助于我理解某些事情。我理解是什么导致了问题。我在评论中提到过