Java spring boot获取客户端IP地址

package com.xbr.om.core.util;

import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 *  获取IP地址,以方便在业务代码任何地方调用
 *
 */
@Component
public class HttpRequestLocal {
   
   public  HttpRequestLocal(){
      
   }
   
     private static final ThreadLocal<HttpServletRequest> requests =
               new ThreadLocal<HttpServletRequest>() {
                   @Override protected HttpServletRequest initialValue() {
                       return null;
               }
           };
    
    public String getRequestIP(){
       return getIpAddr(requests.get());
    }
    
    public  void set(HttpServletRequest request){
       requests.set(request);
    }
    
      /**
        * 获取当前网络ip 
        * @param request 
        * @return 
        */  
       public String getIpAddr(HttpServletRequest request){  
           String ipAddress = request.getHeader("x-forwarded-for");  
               if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
                   ipAddress = request.getHeader("Proxy-Client-IP");  
               }  
               if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
                   ipAddress = request.getHeader("WL-Proxy-Client-IP");  
               }  
               if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
                   ipAddress = request.getRemoteAddr();  
                   if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){  
                       //根据网卡取本机配置的IP  
                       InetAddress inet=null;  
                       try {  
                           inet = InetAddress.getLocalHost();  
                       } catch (UnknownHostException e) {  
                           e.printStackTrace();  
                       }  
                       ipAddress= inet.getHostAddress();  
                   }  
               }  
               //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割  
               if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15  
                   if(ipAddress.indexOf(",")>0){  
                       ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));  
                   }  
               }  
               return ipAddress;   
       }
}

 

posted @ 2021-01-15 11:12  一点不懂·  阅读(450)  评论(0)    收藏  举报