最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JSP如何獲取客戶端真實IP地址

 更新時間:2015年10月02日 12:40:05   投稿:lijiao  
這篇文章主要介紹了JSP如何獲取客戶端真實IP地址,需要的朋友可以參考下

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

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

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

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

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

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

于是可得出獲得客戶端真實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;
}

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

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

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

用戶真實IP為: 192.168.1.110

上面兩種方法都是可行的,千萬不要單單使用 request.getRemoteAddr() 方法獲取客戶端 IP,這種方法是不理想的。

希望這篇文章對大家的學習有所幫助。

  • 用jsp編寫文件上載

    用jsp編寫文件上載

    用jsp編寫文件上載...
    2006-10-10
  • 詳解JSP 中Spring工作原理及其作用

    詳解JSP 中Spring工作原理及其作用

    這篇文章主要介紹了詳解JSP 中Spring工作原理及其作用的相關(guān)資料,使用 AOP后,公共服務(比如日志、持久性、事務等)就可以分解成方面并應用到域?qū)ο笊希瑫r不會增加域?qū)ο蟮膶ο竽P偷膹碗s性,需要的朋友可以參考下
    2017-08-08
  • 一個可以防止刷新的JSP計數(shù)器

    一個可以防止刷新的JSP計數(shù)器

    一個可以防止刷新的JSP計數(shù)器...
    2006-10-10
  • JSP request(return String)用法詳例

    JSP request(return String)用法詳例

    JSP中request(return String)用法詳例 ,需要的朋友可以參考下。
    2009-10-10
  • java Lucene 中自定義排序的實現(xiàn)

    java Lucene 中自定義排序的實現(xiàn)

    使用Lucene來搜索內(nèi)容,搜索結(jié)果的顯示順序當然是比較重要的.Lucene中Build-in的幾個排序定義在大多數(shù)情況下是不適合我們使用的.要適合自己的應用程序的場景,就只能自定義排序功能,本節(jié)我們就來看看在Lucene中如何實現(xiàn)自定義排序功能.
    2008-12-12
  • JSP中的倒數(shù)計時和自動跳轉(zhuǎn)頁面

    JSP中的倒數(shù)計時和自動跳轉(zhuǎn)頁面

    這篇文章主要介紹了JSP中的倒數(shù)計時和自動跳轉(zhuǎn)頁面,需要的朋友可以參考下
    2014-06-06
  • 如何使用JSP訪問MySQL數(shù)據(jù)庫

    如何使用JSP訪問MySQL數(shù)據(jù)庫

    如何使用JSP訪問MySQL數(shù)據(jù)庫...
    2006-10-10
  • 一篇文章帶你了解JavaScript-語句

    一篇文章帶你了解JavaScript-語句

    這篇文章主要介紹了JavaScript的基本語句,包括注釋和書寫格式等基本知識,需要的朋友可以參考下,希望本篇文章能給您帶來幫助
    2021-08-08
  • Spring注入Date類型的三種方法總結(jié)

    Spring注入Date類型的三種方法總結(jié)

    這篇文章主要介紹了Spring注入Date類型的三種方法總結(jié)的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這幾種方法,需要的朋友可以參考下
    2017-10-10
  • 最新評論

    隆子县| 翼城县| 承德县| 中江县| 高安市| 固始县| 汝阳县| 沙田区| 贵港市| 图们市| 鄄城县| 铁力市| 三原县| 泾阳县| 南安市| 井陉县| 巴中市| 塔河县| 黄平县| 溆浦县| 赤峰市| 沂源县| 吴旗县| 漳浦县| 崇仁县| 峨眉山市| 兴山县| 买车| 日喀则市| 微山县| 永年县| 和平区| 南京市| 邹平县| 宜丰县| 望谟县| 米林县| 始兴县| 东山县| 海晏县| 汶上县|