獲取客戶端IP的兩種寫法


一,實習看到項目里這樣寫,第一次見到,整理筆記。^_^

      第一種方法通過

RequestContextHolder獲取request對象,RequestContextHolder用於在其他層獲取請求響應對象。
 第二種方法通過
RequestContextHolder返回的ServletRequestAttributes不存在時,可以通過WebServiceContextImpl構建一個MessageContent對象,獲取request對象
// 通過RequestContextHolder獲取請求對象。不需要傳入請求的對象。
            ServletRequestAttributes attributes= (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
            HttpServletRequest request=null;
            if(null!=attributes) {
                 request = attributes.getRequest();
            }else {
                // 當attributes不存在時
                webServiceContext = new WebServiceContextImpl();
                // 返回在MessageContext此方法時提供的請求的MessageContext
                MessageContext mc = (MessageContext) webServiceContext.getMessageContext();
                // 通過MessageContext構建一個request對象。
                request = (HttpServletRequest) (mc.get(MessageContext.SERVLET_REQUEST));
            }

 之后通過request對象的getHeader("X-Forwarded-For")獲取本地的真實Ip

public static String getIpAddr(HttpServletRequest request) {
        String ip = request.getHeader("X-Forwarded-For");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        /*
         * //這里主要是獲取本機的ip,可有可無 if (ip.equals("127.0.0.1") ||
         * ip.endsWith("0:0:0:0:0:0:1")) { // 根據網卡取本機配置的IP InetAddress inet =
         * null; try { inet = InetAddress.getLocalHost(); } catch
         * (UnknownHostException e) { e.printStackTrace(); } ip =
         * inet.getHostAddress(); }
         */
        return ip;
    }

 


免責聲明!

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



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