servlet如何獲取請求客戶端的IP位址

2021-09-11 17:30:22 字數 994 閱讀 6032

但是request.getremoteaddr()這種方法在大部分情況下都是有效的。但是在通過了apache,squid等反向**軟體就不能獲取到客戶端的真實ip位址了。

如果使用了反向**軟體,將的url反向**為的url時,用request.getremoteaddr()方法獲取的ip位址是:127.0.0.1 或 192.168.1.110,而並不是客戶端的真實ip。

經過**以後,由於在客戶端和服務之間增加了中間層,因此伺服器無法直接拿到客戶端的ip,伺服器端應用也無法直接通過**請求的位址返回給客戶端。但是在**請求的http頭資訊中,增加了x-forwarded-for資訊用以跟蹤原有的客戶端ip位址和原來客戶端請求的伺服器位址。

考慮到這種情況,以下**可以綜合考慮到所有情況:

// 返回用ip位址

}注意:1.如果通過了多級反向**的話,x-forwarded-for的值並不止乙個,而是一串ip值,真正的使用者端的真實ip:第乙個非unknown的有效ip字串

如:x-forwarded-for:192.168.1.110,192.168.1.120, 192.168.1.130, 192.168.1.100,使用者真實ip為: 192.168.1.110

x-forwarded-for:null,192.168.1.120, 192.168.1.130, 192.168.1.100,使用者真實ip為: 192.168.1.120

當訪問位址為localhost時位址格式為 0:0:0:0:0:0:1

訪問位址寫為127.0.0.1時正常

Servlet處理請求

一 設定全域性配置資訊public class demo01 extends httpservlet demo01的配置資訊 nameparam name valueparam value context param demo01servlet name com.lanou3g.com.demo01...

Servlet 請求流程

servlet請求流程 tomcat伺服器是乙個 jsp servlet 容器,servlet 有一套api tomcat 是根據這套 api寫出來的。客戶端傳送乙個請求,到達伺服器後,被servlet 容器攔截,對請求做出處理,將請求中的引數以及一些請求資訊封裝到 物件中,然後呼叫對應的 serv...

Servlet容器如何處理多個請求??

tomcat是一種servlet容器,是servlet執行的載體,兩者相互依存著存在。對多個請求的處理主要有servlet容器的執行緒池來處理。如何處理 1 執行緒池中包含工作者執行緒 即實際執行任務的執行緒 和排程執行緒 即對執行緒進行排程 2 tomcat的執行緒使用單例項多執行緒的機制執行,這...