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.
很漂亮实用的网站。谢谢