通常通過request.getremoteaddr()
取得客戶端的ip位址,做鑑權和校驗,邏輯沒問題,那麼肯定request.getremoteaddr()出了問題,google下,發現有人遇到類似的問題。
最終定位為request.getremoteaddr()這種方法在大部分情況下都是有效的。但是在通過了apache,squid等反向**軟體就不能獲取到客戶端的真實ip位址了。
如果使用了反向**軟體,將http://localhost:8080/
的url反向**為
的url時,用request.getremoteaddr()
方法獲取的ip位址是:127.0.0.1 或 192.168.0.66,而並不是客戶端的真實ip。
經過**以後,由於在客戶端和服務之間增加了中間層,因此伺服器無法直接拿到客戶端的ip,伺服器端應用也無法直接通過**請求的位址返回給客戶端。但是在**請求的http頭資訊中,增加了x-forwarded-for
資訊用以跟蹤原有的客戶端ip位址和原來客戶端請求的伺服器位址。
}像移動閘道器一樣,iisforward這個isapi過濾器也會對request物件進行再包裝,附加一些wls要用的頭資訊。這種情況下,直接用request.getremoteaddr()是無法取到真正的客戶ip的。
實際的iisforward附加頭如下:
//對於通過多個**的情況,第乙個ip為客戶端真實ip,多個ip按照','分割
if(ipaddress!=null && ipaddress.length()>15)
}return ipaddress;
}
Java獲取請求客戶端的真實IP位址
像移動閘道器一樣,iisforward這個isapi過濾器也會對request物件進行再包裝,附加一些wls要用的頭資訊。這種情況下,直接用request.getremoteaddr 是無法取到真正的客戶ip的。實際的iisforward附加頭如下 wl proxy client ip 211.16...
Java獲取客戶端的真實IP
發生的場景 伺服器端接收客戶端請求的時候,一般需要進行簽名驗證,客戶端ip限定等情況,在進行客戶端ip限定的時候,需要首先獲取該真實的ip。一般分為兩種情況 方式一 客戶端未經過 直接訪問伺服器端 nginx,squid,haproxy 方式二 客戶端通過多級 最終到達伺服器端 nginx,squi...
轉 Java獲取請求客戶端的真實IP位址
通常通過request.getremoteaddr 取得客戶端的ip位址,做鑑權和校驗,邏輯沒問題,那麼肯定request.getremoteaddr 出了問題,google下,發現有人遇到類似的問題。最終定位為request.getremoteaddr 這種方法在大部分情況下都是有效的。但是在通過...