項目場景:
使用request.getRemoteAddr()獲取ip地址,這個只是需求中的一個,像獲取id,登陸用戶名,用戶ip,登陸登出日志,用戶訪問了哪些方法,做了什么事情,總體來說就是用戶登錄登出日志,監控用的。現在的項目一般都是使用了Nignx等反向代理的。
問題描述:
在使用request.getRemoteAddr()獲取ip地址的時候得到的值是[0:0:0:0:0:0:0:1],這個是我在做需求測試的時候發現后台日志返回的ip地址長這個樣子,所以研究了一下。
原因分析:
0:0:0:0:0:0:0:1是屬於ipv6,后來我又進行另一台電腦做測試,發現這種情況只有在服務器和客戶端都在同一台電腦上才會出現(例如用localhost訪問的時候才會出現),這是hosts配置文件的問題 。我就是在訪問項目的時候使用了localhost,
解決方案:
注釋掉C:\Windows\System32\drivers\etc\hosts文件里的# ::1 localhost這行即可解決問題。網上這種方式可以,我去找到這個文件發現里面是沒有這一行內容的。
最有效的方式就是改變請求的ip,不要使用localhost:8080
使用127.0.0.1:8080或者ip:8080。
上面已經解釋完畢,另外多寫一些方便更深入的理解。
jsp頁面中用request.getRemoteAddr()獲取的IP地址竟然為0:0:0:0:0:0:0:1 換台機器IP顯示正常,這是為什么呢,照道理講,應該是127.0.0.1才對,為什么這個獲取的值變成了ipv6了呢,而且我發現這種情況只有在服務器和客戶端都在同一台電腦上才會出現(例如用localhost訪問的時候才會出現),后來上網查了查原因。
原來是/etc/hosts這個東西作怪(在windows上應該是C:\Windows\system32\drivers\etc\ hosts這個文件),只需要注釋掉文件中的 # ::1 localhost 這一行即可解決問題。另外localhost這個文件很有用,這里你可以添加自己的條目,例如添加 192.168.0.212 myweb 這樣子,在瀏覽器中原來只能使用192.168.0.212來訪問的,並可以使用myweb來進行替換。
我用的win7系統 同樣遇到此問題,打開文件發現 # ::1 localhost 已注釋 沒有解決問題;后來強制改成
127.0.0.1 localhost
# 127.0.0.1 activate.adobe.com
# ::1 localhost
修改保存之后只要重啟一下Tomcat服務器就可以啦。
ps:
在IPv6的單播地址中有兩種特殊地址,0:0:0:0:0:0:0:0
全零(可簡寫為::)的地址叫未指定地址,一般不分配給主機
和0:0:0:0:0:0:0:1, (可簡寫為::1)的地址叫環回地址,用來檢測本主機協議是否正確安裝
參考內容:
https://blog.csdn.net/liquid_road/article/details/117404500
https://www.cnblogs.com/m3Lee/p/3808002.html