隨筆-13  評論-28  文章-63  trackbacks-0

          在IIS+Weblogic整合系統中,像移動網關一樣,iisforward這個ISAPI過濾器也會對request對象進行再包裝,附加一些WLS要用的頭信息。這種情況下,直接用request.getRemoteAddr()是無法取到真正的客戶IP的。

          實際的iisforward附加頭如下:

          WL-Proxy-Client-IP=211.161.1.239
          Proxy-Client-IP=211.161.1.239
          X-Forwarded-For=211.161.1.239
          WL-Proxy-Client-Keysize=
          WL-Proxy-Client-Secretkeysize=
          X-WebLogic-Request-ClusterInfo=true
          X-WebLogic-KeepAliveSecs=30
          X-WebLogic-Force-JVMID=-327089098
          WL-Proxy-SSL=false
          
          綜上,正確作法如下:
          public String getIpAddr(HttpServletRequest request) {
              String ip=request.getHeader("X-Forwarded-For");
              if(ip == null || ip.length() == 0) {
                  ip=request.getHeader("Proxy-Client-IP");
              }
              if(ip == null || ip.length() == 0) {
                  ip=request.getHeader("WL-Proxy-Client-IP");
              }
              if(ip == null || ip.length() == 0) {
                  ip=request.getRemoteAddr();
              }
              return ip;
          }
          
          如此一來,就可適應各種情況,包括通過移動網關訪問(會附加X-Forwarded-For)。通過這個簡單例子可以看出封裝和抽象的重要性。
          posted on 2006-09-20 15:27 七匹狼 閱讀(1245) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 临猗县| 丰原市| 布拖县| 福建省| 宁都县| 洛川县| 呼玛县| 定陶县| 修文县| 花莲市| 乌什县| 扬中市| 崇仁县| 潮州市| 赤壁市| 西林县| 饶阳县| 建湖县| 娱乐| 香河县| 鲜城| 谢通门县| 云南省| 周宁县| 乳源| 增城市| 涿鹿县| 桃园市| 丰城市| 秦皇岛市| 芒康县| 高淳县| 青铜峡市| 延津县| 敦化市| 吉隆县| 锡林郭勒盟| 淳化县| 疏勒县| 阳曲县| 营口市|