posts - 0,  comments - 17,  trackbacks - 0

           java 代碼

           1private final String getClientAddress(HttpServletRequest request) {    
           2
           3    String address = request.getHeader("X-Forwarded-For");    
           4
           5    if (address != null && StringUtil.isIPAddress(address)) {    
           6
           7        return address;    
           8
           9    }
              
          10
          11    return request.getRemoteAddr();    
          12
          13}
             
          14

           

          另外原因主要是Squid的使用:

          參見:www.aygfsteel.com/Alpha/archive/2006/07/12/57764.aspx

          在很多應用下都可能有需要將用戶的真實IP記錄下來,這時就要獲得用戶的真實IP地址,在JSP里,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了Apache,Squid等反向代理軟件就不能獲取到客戶端的真實IP地址了。

          這段時間在做IP統計的程序設計,由于服務器作了集群,使用了反向代理軟件,將http://192.168.1.110:2046/的URL反向代理為http://www.xxx.com/的URL時,用request.getRemoteAddr()方法獲取的IP地址是:127.0.0.1 或 192.168.1.110,而并不是客戶端的真實IP。這是什么原因呢?

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

          posted on 2007-12-02 17:00 xyz 閱讀(3520) 評論(0)  編輯  收藏 所屬分類: 網絡文摘

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          留言簿

          隨筆檔案(1)

          文章分類(44)

          文章檔案(46)

          收藏夾(1)

          Adobe

          AOP

          API

          appServer

          BI

          c

          • c-free
          • codeblocks
          • codelite
          • CodeLite IDE 是一個強大的開源,跨平臺的 C/C++整合開發環境. 支持包括 Windows、Linux 和 Mac 系統下運行
          • codelite官網
          • dev-c++
          • Dev-C++是一個C&C++開發工具,它是一款自由軟件,遵守GPL協議。
          • GCC
          • GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因為它原本只能處理 C語言。GCC 很快地擴展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada 與其他語言。

          Cache

          CMS

          DB

          eclipse

          FreeMarker

          hibernate

          html5

          ibatis

          java

          jquery

          js

          json

          Linux

          Log

          mail server

          mobile

          mysql

          oauth

          openID

          other

          PHP

          portal

          report

          Scheduler

          schema

          Security

          SOA

          spring

          struts

          UI原型設計

          w3c

          Wap

          webservice

          xml

          供應鏈管理

          博客鏈接

          好網站

          工作流

          開源網

          招聘

          插件下載

          操作系統

          構建可伸縮的系統

          構建工具

          測試

          • IETest
          • IE官網
          • OpenSTA
          • Siege
          • Siege是一個壓力測試和評測工具,設計用于WEB開發這評估應用在壓力下的承受能力

          游戲

          源碼托管

          經營

          資源

          金融/財務

          搜索

          •  

          最新評論

          主站蜘蛛池模板: 绥阳县| 邢台市| 顺昌县| 江西省| 利辛县| 海丰县| 潮安县| 石棉县| 古交市| 南乐县| 城固县| 庆云县| 潮安县| 桂东县| 图木舒克市| 清水县| 南投市| 屏东市| 陵川县| 开化县| 侯马市| 亚东县| 梓潼县| 南平市| 左权县| 丹巴县| 岳阳县| 海城市| 科尔| 新宁县| 长子县| 石屏县| 临安市| 凤冈县| 清河县| 乌拉特前旗| 扎赉特旗| 西畴县| 林周县| 神池县| 阿拉善左旗|