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

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

          實(shí)際的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;
          }
          
          如此一來,就可適應(yīng)各種情況,包括通過移動網(wǎng)關(guān)訪問(會附加X-Forwarded-For)。通過這個簡單例子可以看出封裝和抽象的重要性。
          posted on 2006-09-20 15:27 七匹狼 閱讀(1241) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 禹州市| 望都县| 临澧县| 临高县| 邵东县| 阳曲县| 江安县| 沁源县| 抚州市| 玉山县| 玉林市| 治县。| 清水县| 太湖县| 绥滨县| 柘荣县| 宜丰县| 乐清市| 安新县| 成安县| 镇康县| 汶川县| 纳雍县| 当阳市| 东丰县| 望都县| 临颍县| 凉山| 佛山市| 循化| 聂荣县| 尚志市| 康马县| 明星| 黎川县| 宜黄县| 康定县| 清镇市| 隆昌县| 古蔺县| 浦县|