一般情況下直接使用HttpServletRequest對象的getRemoteAddr()方法就能獲取到客戶端IP地址了。
/** * 獲取客戶端IP地址 */ public String getClientIP(HttpServletRequest request){ return request.getRemoteAddr(); }
實際情況下項目的開發都會比較復雜,比如會使用到反向代理,此時經過代理后客戶端和服務端(真正處理業務的服務端)之間就會增加了一個服務端(分配請求的服務端),當
服務端(真正處理業務的服務端)使用HttpServletRequest對象的getRemoteAddr()方法去獲取客戶端的IP時,得到的IP會是服務端(分配請求的服務端)的IP,而非客戶端的IP。
所以此時就要使用HttpServletRequest對象的getHeader()方法來獲取真實的客戶端IP地址了
/** * 獲取客戶端IP地址 */ public String getClientIP(HttpServletRequest request){ if(request.getHeader("x-forwarded-for") == null){ return request.getRemoteAddr(); } //x-forwarded-for是 return request.getHeader("x-forwarded-for"); }