noHup - ip
type: channel
link: http://www.nohup.cc/tag/ip/
items: Java后台获取客户端ip地址的注意事项

Java后台获取客户端ip地址的注意事项
type: item
date: 2016-07-23T13:09:00+00:00
description: Overview1.修改hosts文件2.设置eclipse Overview 前面讲到，消息队列需要用到客户端的ip地址和时间戳，获取客户端的ip地址就需要下面几行简单的代码。 import javax.servlet.http.HttpServletRequest; HttpServletRequest request = ServletActionContext.getRequest(); String ipAddress = request.getHeader("X-FORWARDED-FOR"); if (ipAddress == null) { ipAddress = request.getRemoteAddr(); } System.out.println(ipAddress); 我将上面几行代码，放入之前的PhosphoPredict项目的action中做实验，结果显示如下： 0:0:0:0:0:0:0:1 这和我们平时的认知不同，下面就是解决办法。 1.修改hosts文件 我在ubuntu14.04系统下，打开/etc/hosts文件，看到如下信息： # Localhost 127.0.0.1 localhost 127.0.0.1 young 255.255.255.255 broadcasthost ::1 localhost fe80::1%lo0 localhost 我们将 ::1 localhost 这句注释掉，再提交， 127.0.0.1 正确答案就出现了。 其他系统，请自行查找文件目录并修改。 2.设置eclipse 我们在eclipse运行本程序的时候，可以配置一下运行参数： 依次点击Run→Run Configurations…→Apache Tomcat→Tomcat v7.0 Server at localhost,这时候点击右边的Arguments，在下面的VM arguments框中加上一句： -Djava.net.preferIPv4Stack=true 最后点击Apply。然后就可以了。 总结：这是因为，只有在本机提交的时候，才会出现，客户端提交就会显示真实ip地址了。而系统会优先显示ipv6格式的本机ip。我们两种方法，第一种是屏蔽掉ipv6的表示方法，第二种则是指定优先ipv4表示。 两种方法更推荐第二种。 这篇文章主要参考了stackoverflow.