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

基于request獲取訪問(wèn)者真實(shí)IP代碼示例

 更新時(shí)間:2020年10月15日 15:33:03   作者:賈小仙  
這篇文章主要介紹了基于request獲取訪問(wèn)者真實(shí)IP代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

在JSP里,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過(guò)了Apache,Squid等反向代理軟件就不能獲取到客戶端的真實(shí)IP地址了。

如果使用了反向代理軟件,將http://192.168.1.110:2046/ 的URL反向代理為http://www.xxx.com/ 的URL時(shí),用request.getRemoteAddr()方法獲取的IP地址是:127.0.0.1 或 192.168.1.110,而并不是客戶端的真實(shí)IP。

經(jīng)過(guò)代理以后,由于在客戶端和服務(wù)之間增加了中間層,因此服務(wù)器無(wú)法直接拿到客戶端的IP,服務(wù)器端應(yīng)用也無(wú)法直接通過(guò)轉(zhuǎn)發(fā)請(qǐng)求的地址返回給客戶端。但是在轉(zhuǎn)發(fā)請(qǐng)求的HTTP頭信息中,增加了X-FORWARDED-FOR信息。用以跟蹤原有的客戶端IP地址和原來(lái)客戶端請(qǐng)求的服務(wù)器地址。當(dāng)我們?cè)L問(wèn)http://www.xxx.com/index.jsp/ 時(shí),其實(shí)并不是我們?yōu)g覽器真正訪問(wèn)到了服務(wù)器上的index.jsp文件,而是先由代理服務(wù)器去訪問(wèn)http://192.168.1.110:2046/index.jsp ,代理服務(wù)器再將訪問(wèn)到的結(jié)果返回給我們的瀏覽器,因?yàn)槭谴矸?wù)器去訪問(wèn)index.jsp的,所以index.jsp中通過(guò)request.getRemoteAddr()的方法獲取的IP實(shí)際上是代理服務(wù)器的地址,并不是客戶端的IP地址。

于是可得出獲得客戶端真實(shí)IP地址的方法一:

public String getRemortIP(HttpServletRequest request) {
 if (request.getHeader("x-forwarded-for") == null) {
  return request.getRemoteAddr();
 }
 return request.getHeader("x-forwarded-for");
 }

可是當(dāng)我訪問(wèn)http://www.xxx.com/index.jsp/ 時(shí),返回的IP地址始終是unknown,也并不是如上所示的127.0.0.1 或 192.168.1.110了,而我訪問(wèn)http://192.168.1.110:2046/index.jsp 時(shí),則能返回客戶端的真實(shí)IP地址,寫(xiě)了個(gè)方法去驗(yàn)證。原因出在了Squid上。squid.conf 的配制文件 forwarded_for 項(xiàng)默認(rèn)是為on,如果 forwarded_for 設(shè)成了 off  則:X-Forwarded-For: unknown

于是可得出獲得客戶端真實(shí)IP地址的方法二:

   public 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.getRemoteAddr();
    }
    return ip;
  }

  可是,如果通過(guò)了多級(jí)反向代理的話,X-Forwarded-For的值并不止一個(gè),而是一串Ip值,究竟哪個(gè)才是真正的用戶端的真實(shí)IP呢?

  答案是取X-Forwarded-For中第一個(gè)非unknown的有效IP字符串。

  如:

  X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100

  用戶真實(shí)IP為: 192.168.1.110

說(shuō)明:按這種方法不一定100%準(zhǔn),網(wǎng)上很多人提到要準(zhǔn)確的話必須做一個(gè)客戶端空間,如applet。

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

相關(guān)文章

  • Java讀文件修改默認(rèn)換行符的實(shí)現(xiàn)

    Java讀文件修改默認(rèn)換行符的實(shí)現(xiàn)

    這篇文章主要介紹了Java讀文件修改默認(rèn)換行符的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring之異步任務(wù)@Async解讀

    Spring之異步任務(wù)@Async解讀

    這篇文章主要介紹了Spring之異步任務(wù)@Async,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • JavaWeb表單注冊(cè)界面的實(shí)現(xiàn)方法

    JavaWeb表單注冊(cè)界面的實(shí)現(xiàn)方法

    這篇文章主要介紹了JavaWeb表單注冊(cè)界面的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文大家能掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • SpringBoot遇到的坑@Qualifier報(bào)紅的解決

    SpringBoot遇到的坑@Qualifier報(bào)紅的解決

    這篇文章主要介紹了SpringBoot遇到的坑@Qualifier報(bào)紅的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring單數(shù)據(jù)源的配置詳解

    Spring單數(shù)據(jù)源的配置詳解

    spring數(shù)據(jù)源的配置網(wǎng)絡(luò)上有很多例子,這里我也來(lái)介紹一下單數(shù)據(jù)源配置的例子,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java SpringBoot實(shí)現(xiàn)帶界面的代碼生成器詳解

    Java SpringBoot實(shí)現(xiàn)帶界面的代碼生成器詳解

    這篇文章主要介紹了Java SpringBoot如何實(shí)現(xiàn)帶界面的代碼生成器,幫助大家更好的理解和使用Java SpringBoot編程語(yǔ)言,感興趣的朋友可以了解下
    2021-09-09
  • Spring使用ThreadPoolTaskExecutor自定義線程池及異步調(diào)用方式

    Spring使用ThreadPoolTaskExecutor自定義線程池及異步調(diào)用方式

    這篇文章主要介紹了Spring使用ThreadPoolTaskExecutor自定義線程池及異步調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 詳解SpringBoot上傳圖片到阿里云的OSS對(duì)象存儲(chǔ)中

    詳解SpringBoot上傳圖片到阿里云的OSS對(duì)象存儲(chǔ)中

    這篇文章主要介紹了SpringBoot上傳圖片到阿里云的OSS對(duì)象存儲(chǔ)中,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Mybatis-Plus使用p6spy對(duì)SQL性能進(jìn)行監(jiān)控的方法

    Mybatis-Plus使用p6spy對(duì)SQL性能進(jìn)行監(jiān)控的方法

    這篇文章主要介紹了Mybatis-Plus使用p6spy對(duì)SQL性能進(jìn)行監(jiān)控的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 23種設(shè)計(jì)模式(16)java訪問(wèn)者模式

    23種設(shè)計(jì)模式(16)java訪問(wèn)者模式

    這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java訪問(wèn)者模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評(píng)論