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

          在IIS+Weblogic整合系統(tǒng)中,像移動網(wǎng)關(guān)一樣,iisforward這個ISAPI過濾器也會對request對象進(jìn)行再包裝,附加一些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;
          }
          
          如此一來,就可適應(yīng)各種情況,包括通過移動網(wǎng)關(guān)訪問(會附加X-Forwarded-For)。通過這個簡單例子可以看出封裝和抽象的重要性。
          posted on 2006-09-20 15:27 七匹狼 閱讀(1243) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 兴业县| 商河县| 柳江县| 白玉县| 三都| 汝州市| 启东市| 丽江市| 古交市| 申扎县| 托克逊县| 南康市| 赣州市| 隆子县| 囊谦县| 达尔| 南和县| 凉山| 刚察县| 墨玉县| 平罗县| 威远县| 仪陇县| 东海县| 莎车县| 宜阳县| 斗六市| 榕江县| 青浦区| 隆安县| 长治县| 滕州市| 深泽县| 岳西县| 申扎县| 洛川县| 阳城县| 仪征市| 南安市| 章丘市| 定远县|