隨筆-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
          主站蜘蛛池模板: 禹州市| 昭平县| 汕头市| 胶南市| 枝江市| 浦东新区| 巴青县| 永和县| 宜宾县| 台北县| 北安市| 赤壁市| 平果县| 松桃| 沁水县| 公主岭市| 宜黄县| 宁安市| 唐海县| 涞源县| 太谷县| 巩留县| 遂宁市| 金华市| 南城县| 花莲县| 新乡县| 黔南| 肥城市| 和龙市| 巴楚县| 合肥市| 江津市| 高清| 新安县| 德庆县| 绵竹市| 舟曲县| 喀喇沁旗| 开平市| 波密县|