通過下面這段**可以獲取:
string ip = request.getheader("x-forwarded-for");if(ip == null || ip.length() == 0 || "unknown".equalsignorecase(ip))
if(ip == null || ip.length() == 0 || "unknown".equalsignorecase(ip))
if(ip == null || ip.length() == 0 || "unknown".equalsignorecase(ip))
主要的方法是通過請求的header中的資訊獲取,若獲取不到則使用request.getremoteaddr()方法獲取。
另外,如果遇到這個問題也有解決辦法:
request.getremoteaddr() 獲取的值為0:0:0:0:0:0:0:1的原因及解決辦法經過**的話,tomcat記錄的訪問者ip按道理來說就是**伺服器的ip,然而我們是要獲取使用者的真實ip的。最近在進行web開發時,在jsp頁面獲取伺服器ip時,遇到了request.getremoteaddr()獲取的值為0:0:0:0:0:0:0:1,這是為什麼呢,照道理講,應該是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來進行替換。
如果還不能解決,本機訪問的時候用127.0.0.1或本機ip代替localhost即可解決
機智的前輩們當然已經幫我們鋪好路了,通過修改nginx配置就可以完成。具體配置如下:
server
加入上面加粗的那一行就ok了,可以在tomcat端通過getheader("x-forwarded-for")獲取到訪問者的ip了。
原理:
意思是增加乙個$proxy_add_x_forwarded_for到x-forwarded-for裡去,注意是增加,而不是覆蓋,當然由於預設的x-forwarded-for值是空的,所以我們總感覺x-forwarded-for的值就等於$proxy_add_x_forwarded_for的值,實際上當你搭建兩台nginx在不同的ip上,並且都使用了這段配置,那你會發現在web伺服器端通過request.getattribute("x-forwarded-for")獲得的將會是客戶端ip和第一台nginx的ip。修改tomcat下的/conf/server.xml,將以下配置開啟(預設為注釋狀態),那麼$proxy_add_x_forwarded_for又是什麼?
$proxy_add_x_forwarded_for變數包含客戶端請求頭中的"x-forwarded-for",與$remote_addr兩部分,他們之間用逗號分開。
prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" />
怎樣獲取訪問者真實IP位址
在 jsp裡,獲取客戶端的 ip位址的方法是 request.getremoteaddr 這種方法在大部分情況下都是有效的。但是在通過了apache,squid等反向 軟體就不能獲取到客戶端的真實ip位址了。如果使用了反向 軟體,用request.getremoteaddr 方法獲取的ip位址是 1...
記錄 獲取訪問者的真實IP
場景描述 伺服器端接收客戶端請求的時候,一般需要進行簽名驗證,客戶端ip限定等情況,在進行客戶端ip限定的時候,需要首先獲取到真實的ip。ip訪問一般分為兩種情況 方式一 客戶端未經過 直接訪問伺服器端 nginx,squid,haproxy 方式二 客戶端通過多級 最終到達伺服器端 nginx,s...
Java jsp獲取訪問者真實的IP位址
在jsp裡,獲取客戶端的ip位址的方法是 request.getremoteaddr 這種方法在大部分情況下都是有效的。但是在通過了apache,squid等反向 軟體就不能獲取到客戶端的真實ip位址了。如果使用了反向 軟體,用request.getremoteaddr 方法獲取的ip位址是 127...