亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java獲取客戶端真實(shí)IP地址過(guò)程解析

 更新時(shí)間:2020年01月16日 11:04:42   作者:樓蘭的胡楊  
這篇文章主要介紹了Java獲取客戶端真實(shí)IP地址過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Java獲取客戶端真實(shí)IP地址過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

業(yè)務(wù)背景

服務(wù)器端接收客戶端請(qǐng)求的時(shí)候,一般需要進(jìn)行簽名驗(yàn)證,客戶端IP限定等攔截,在進(jìn)行IP限定的時(shí)候就需要獲取客戶端真實(shí)的IP。

基礎(chǔ)知識(shí)

訪問(wèn)服務(wù)端的方式一般分為兩種:

未經(jīng)過(guò)代理,直接訪問(wèn)服務(wù)器端;

通過(guò)多級(jí)代理,最終到達(dá)服務(wù)器端(nginx,squid,haproxy)。

客戶端請(qǐng)求信息都包含在HttpServletRequest中,對(duì)于第一種訪問(wèn)方式可以通過(guò)getRemoteAddr()方法獲得客戶端真實(shí)IP,而另一種則行不通,但是可以通過(guò)x-forwarded-for獲得轉(zhuǎn)發(fā)后請(qǐng)求信息。當(dāng)客戶端請(qǐng)求被轉(zhuǎn)發(fā)時(shí),IP將會(huì)追加在其后并以英文逗號(hào)隔開(kāi),例如:10.47.103.13,4.2.2.2,10.96.112.230。

請(qǐng)求中的參數(shù):

  request.getHeader("x-forwarded-for") : 10.47.103.13,4.2.2.2,10.96.112.230
  request.getHeader("X-Real-IP") : 10.47.103.13
  request.getRemoteAddr():10.96.112.230

客戶端訪問(wèn)經(jīng)過(guò)轉(zhuǎn)發(fā),IP將會(huì)追加在其后并以逗號(hào)隔開(kāi)。最終準(zhǔn)確的客戶端信息為:

  • x-forwarded-for 不為空,則為逗號(hào)前第一個(gè)IP ;
  • X-Real-IP不為空,則為該IP ;
  • 否則為getRemoteAddr() ;

相關(guān)請(qǐng)求頭的解釋:

X-Forwarded-For 記錄一個(gè)請(qǐng)求從客戶端出發(fā)到目標(biāo)服務(wù)器過(guò)程中經(jīng)歷的代理,或者負(fù)載平衡設(shè)備的IP。這是由緩存代理軟件 Squid 引入,用來(lái)表示 HTTP 請(qǐng)求端真實(shí) IP,現(xiàn)在已經(jīng)成為事實(shí)上的標(biāo)準(zhǔn),被各大 HTTP 代理、負(fù)載均衡等轉(zhuǎn)發(fā)服務(wù)廣泛使用,并被寫(xiě)入 RFC 7239(Forwarded HTTP Extension)標(biāo)準(zhǔn)之中。格式為X-Forwarded-For:client1,proxy1,proxy2,一般情況下,第一個(gè)ip為客戶端真實(shí)ip,后面的為經(jīng)過(guò)的代理服務(wù)器的ip?,F(xiàn)在大部分的代理都會(huì)加上這個(gè)請(qǐng)求頭。

Proxy-Client-IP/WL- Proxy-Client-IP 這個(gè)一般是經(jīng)過(guò)apache http服務(wù)器的請(qǐng)求才會(huì)有,用apache http做代理時(shí)一般會(huì)加上Proxy-Client-IP請(qǐng)求頭,而WL-Proxy-Client-IP是他的weblogic插件加上的頭。

HTTP_CLIENT_IP 有些代理服務(wù)器會(huì)加上此請(qǐng)求頭。

X-Real-IP nginx代理一般會(huì)加上此請(qǐng)求頭。

獲取客戶端真實(shí)IP地址

源碼:

/**
 * 獲取客戶端的IP地址<br/>
 * 注意本地測(cè)試訪問(wèn)項(xiàng)目地址時(shí),瀏覽器請(qǐng)求不要用 localhost,請(qǐng)用本機(jī)IP;否則,取不到 IP
 *
 * @author east7
 * @date 2019年12月03日
 * @return String 真實(shí)IP地址
 */
public static String getClientIpAddress(HttpServletRequest request) {
  // 獲取請(qǐng)求主機(jī)IP地址,如果通過(guò)代理進(jìn)來(lái),則透過(guò)防火墻獲取真實(shí)IP地址
  String headerName = "x-forwarded-for";
  String ip = request.getHeader(headerName);
  if (null != ip && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
    // 多次反向代理后會(huì)有多個(gè)IP值,第一個(gè)IP才是真實(shí)IP,它們按照英文逗號(hào)','分割
    if (ip.indexOf(",") != -1) {
      ip = ip.split(",")[0];
    }
  }
  if (checkIp(ip)) {
    headerName = "Proxy-Client-IP";
    ip = request.getHeader(headerName);
  }
  if (checkIp(ip)) {
    headerName = "WL-Proxy-Client-IP";
    ip = request.getHeader(headerName);
  }
  if (checkIp(ip)) {
    headerName = "HTTP_CLIENT_IP";
    ip = request.getHeader(headerName);
  }
  if (checkIp(ip)) {
    headerName = "HTTP_X_FORWARDED_FOR";
    ip = request.getHeader(headerName);
  }
  if (checkIp(ip)) {
    headerName = "X-Real-IP";
    ip = request.getHeader(headerName);
  }
  if (checkIp(ip)) {
    headerName = "remote addr";
    ip = request.getRemoteAddr();
    // 127.0.0.1 ipv4, 0:0:0:0:0:0:0:1 ipv6
    if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) {
      //根據(jù)網(wǎng)卡取本機(jī)配置的IP
      InetAddress inet = null;
      try {
        inet = InetAddress.getLocalHost();
      } catch (UnknownHostException e) {
        e.printStackTrace();
      }
      ip = inet.getHostAddress();
    }
  }
  logger.info("getClientIp IP is " + ip + ", headerName = " + headerName);
  return ip;
}
private static boolean checkIp(String ip) {
  if (null == ip || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
    return true;
  }
  return false;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決ApplicationContext獲取不到Bean的問(wèn)題

    解決ApplicationContext獲取不到Bean的問(wèn)題

    這篇文章主要介紹了解決ApplicationContext獲取不到Bean的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java批量導(dǎo)出word壓縮后的zip文件案例

    Java批量導(dǎo)出word壓縮后的zip文件案例

    這篇文章主要介紹了Java批量導(dǎo)出word壓縮后的zip文件案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • Spring XML Schema擴(kuò)展機(jī)制的使用示例

    Spring XML Schema擴(kuò)展機(jī)制的使用示例

    所謂整合,即在Spring的框架下進(jìn)行擴(kuò)展,讓框架能無(wú)縫的與Spring工程配合使用。Spring設(shè)計(jì)了良好的擴(kuò)展的機(jī)制,本文將對(duì)Spring的擴(kuò)展方法及原理進(jìn)行簡(jiǎn)單介紹。
    2021-05-05
  • SpringBoot實(shí)現(xiàn)微信及QQ綁定登錄的示例代碼

    SpringBoot實(shí)現(xiàn)微信及QQ綁定登錄的示例代碼

    本文主要介紹了SpringBoot實(shí)現(xiàn)微信及QQ綁定登錄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 深入談?wù)刯ava的枚舉(enum)類(lèi)型

    深入談?wù)刯ava的枚舉(enum)類(lèi)型

    這篇文章介紹的是java中的枚舉類(lèi)型,對(duì)于枚舉類(lèi)型的相關(guān)知識(shí),我們也介紹過(guò)不少方面的內(nèi)容。希望本文能夠給你帶來(lái)幫助,下面來(lái)一起看看,有需要的可以參考借鑒。
    2016-09-09
  • Java中的事件處理機(jī)制詳細(xì)解讀

    Java中的事件處理機(jī)制詳細(xì)解讀

    這篇文章主要介紹了Java中的事件處理機(jī)制詳細(xì)解讀,ava事件處理是采取"委派事件模型",當(dāng)事件發(fā)生時(shí),產(chǎn)生事件的對(duì)象會(huì)把此"信息"傳遞給"事件的監(jiān)聽(tīng)者"處理,需要的朋友可以參考下
    2024-01-01
  • 關(guān)于SpringCloud中Ribbon的7種負(fù)載均衡策略解析

    關(guān)于SpringCloud中Ribbon的7種負(fù)載均衡策略解析

    這篇文章主要介紹了關(guān)于SpringCloud中Ribbon的7種負(fù)載均衡策略解析,服務(wù)端負(fù)載均衡器的問(wèn)題是,它提供了更強(qiáng)的流量控制權(quán),但無(wú)法滿足不同的消費(fèi)者希望使用不同負(fù)載均衡策略的需求,而使用不同負(fù)載均衡策略的場(chǎng)景確實(shí)是存在的,需要的朋友可以參考下
    2023-07-07
  • 淺談Spring Batch在大型企業(yè)中的最佳實(shí)踐

    淺談Spring Batch在大型企業(yè)中的最佳實(shí)踐

    本篇文章主要介紹了淺談Spring Batch在大型企業(yè)中的最佳實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • 如何用匿名內(nèi)部類(lèi)實(shí)現(xiàn) Java 同步回調(diào)

    如何用匿名內(nèi)部類(lèi)實(shí)現(xiàn) Java 同步回調(diào)

    這篇文章主要介紹了如何用匿名內(nèi)部類(lèi)實(shí)現(xiàn) Java 同步回調(diào),幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-10-10
  • springmvc實(shí)現(xiàn)自定義類(lèi)型轉(zhuǎn)換器示例

    springmvc實(shí)現(xiàn)自定義類(lèi)型轉(zhuǎn)換器示例

    本篇文章主要介紹了springmvc實(shí)現(xiàn)自定義類(lèi)型轉(zhuǎn)換器示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02

最新評(píng)論