javaweb獲取客戶端真實ip


在安全性要求較高的web項目中,我們經常有這樣的需求:

黑名單:禁止指定ip訪問。

白名單:允許指定ip訪問。

根據ip追蹤惡意入侵系統者。

 

在java中我們通常可以這樣獲取客戶端ip地址:

request.getRemoteAddr()

 

但是這個方法有個弊端,就是如果對方使用了反向代理,那么這個方法獲取到的永遠都是反向代理服務器的ip,而並非用戶的真實ip。這樣也能達到禁止訪問的目的,但是對於已經發生的惡意入侵,我們卻無法定位到真實的用戶主機。

 

當你遇到類似的問題時,那么下面的代碼就能夠很好的幫助你。

      public  static  String getClientIP(HttpServletRequest request) {
         String ip = request.getHeader( "X-Forwarded-For" );
         if  (StringUtils.isNotEmpty(ip) && ! "unKnown" .equalsIgnoreCase(ip)) {
             // 多次反向代理后會有多個ip值,第一個ip才是真實ip
             int  index = ip.indexOf( "," );
             if  (index != - 1 ) {
                 return  ip.substring( 0 , index);
             else  {
                 return  ip;
             }
         }
         ip = request.getHeader( "X-Real-IP" );
         if  (StringUtils.isNotEmpty(ip) && ! "unKnown" .equalsIgnoreCase(ip)) {
             return  ip;
         }
         return  request.getRemoteAddr();
     }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM