yj10864

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            8 Posts :: 1 Stories :: 9 Comments :: 0 Trackbacks
          基本思想:先將的IP地址轉換成long型的數,然后比較IP的大小來判斷是否處在符合條件的IP地址段。
          IP地址轉化成long型數的算法
           1
           2  // 一個IP,是一個32位無符號的二進制數。故用long的低32表示無符號32位二進制數。  
           3    public long getIP(InetAddress ip) {  
           4           byte[] b = ip.getAddress();  
           5          long l = b[0<< 24L & 0xff000000L | b[1<< 16L & 0xff0000L  
           6                 | b[2<< 8L & 0xff00 | b[3<< 0L & 0xff;  
           7           return l;  
           8       }
            
           9
          10// 一個IP,是一個32位無符號的二進制數。故用long的低32表示無符號32位二進制數。
          11public long getIP(InetAddress ip) {
          12        byte[] b = ip.getAddress();
          13        long l = b[0<< 24L & 0xff000000L | b[1<< 16L & 0xff0000L
          14                | b[2<< 8L & 0xff00 | b[3<< 0L & 0xff;
          15        return l;
          16    }
          在struts2相應的action中編寫如下判斷是否用戶是校內用戶的方法(方法參數中ip1的IP大小應該大于ip2的IP大小):
           1   public void isSchoolUser(String ip1, String ip2) throws Exception {  
           2             // 得到用戶的IP地址  
           3            String s = ServletActionContext.getRequest().getRemoteAddr();  
           4           long l = getIP(InetAddress.getByName(s));  
           5            // 設置IP地址段  
           6           long l1 = getIP(InetAddress.getByName(ip1));  
           7           long l2 = getIP(InetAddress.getByName(ip2));  
           8             // 判斷用戶IP是否處在IP段中  
           9            if (l >= l1 && l <= l2) {  
          10           ActionContext.getContext().getSession().put("isSchoolUser","yes");  
          11           }
            
          12       }
            
          13
          14public void isSchoolUser(String ip1, String ip2) throws Exception {
          15         // 得到用戶的IP地址
          16        String s = ServletActionContext.getRequest().getRemoteAddr();
          17        long l = getIP(InetAddress.getByName(s));
          18         // 設置IP地址段
          19        long l1 = getIP(InetAddress.getByName(ip1));
          20        long l2 = getIP(InetAddress.getByName(ip2));
          21         // 判斷用戶IP是否處在IP段中
          22        if (l >= l1 && l <= l2) {
          23        ActionContext.getContext().getSession().put("isSchoolUser","yes");
          24        }

          25    }
          上面的方法中用到了InetAddress,所以需要引入java.net.InetAddress包;
          接著再編寫IP攔截器如下:
           1    public class IpAuthorityInterceptor extends AbstractInterceptor {  
           2        public String intercept(ActionInvocation invocation) throws Exception {  
           3            ActionContext context = invocation.getInvocationContext();  
           4            Map<String, String> session = context.getSession();  
           5            if ("yes".equals(session.get("isSchoolUser"))){  
           6                return invocation.invoke();  
           7            }
           else {  
           8                context.put("AuthorityError""你是外網用戶無法訪問此資源");  
           9                return "error";  
          10           }
            
          11       }
            
          12   }
            
          13
          14public class IpAuthorityInterceptor extends AbstractInterceptor {
          15    public String intercept(ActionInvocation invocation) throws Exception {
          16        ActionContext context = invocation.getInvocationContext();
          17        Map<String, String> session = context.getSession();
          18        if ("yes".equals(session.get("isSchoolUser"))){
          19            return invocation.invoke();
          20        }
           else {
          21            context.put("AuthorityError""你是外網用戶無法訪問此資源");
          22            return "error";
          23        }

          24    }

          25}
           1<interceptors>  
           2             <interceptor name="IpAuthorityInterceptor"  
           3                  class="web.IpAuthorityInterceptor">  
           4                 <!--此class對應你項目中的IpAuthorityInterceptor的編寫位置-->  
           5               </interceptor>  
           6               <interceptor-stack name="IpAuthority">  
           7                   <interceptor-ref name="defaultStack"></interceptor-ref>  
           8                  <interceptor-ref name="IpAuthorityInterceptor"></interceptor-ref>  
           9               </interceptor-stack>  
          10           </interceptors>  
          11
          12<interceptors>
          13            <interceptor name="IpAuthorityInterceptor"
          14                class="web.IpAuthorityInterceptor">
          15              <!--此class對應你項目中的IpAuthorityInterceptor的編寫位置-->
          16            </interceptor>
          17            <interceptor-stack name="IpAuthority">
          18                <interceptor-ref name="defaultStack"></interceptor-ref>
          19                <interceptor-ref name="IpAuthorityInterceptor"></interceptor-ref>
          20            </interceptor-stack>
          21        </interceptors>
          posted on 2009-10-26 10:43 jerry yang 閱讀(1586) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 澄迈县| 定襄县| 开平市| 锦屏县| 三门峡市| 阜阳市| 涟源市| 南华县| 汶川县| 独山县| 中牟县| 章丘市| 巢湖市| 兴和县| 泸定县| 永兴县| 海林市| 巴楚县| 舞阳县| 托克逊县| 焉耆| 黄龙县| 乐陵市| 策勒县| 图们市| 清远市| 措美县| 潞城市| 资溪县| 河池市| 广元市| 台江县| 镇雄县| 大荔县| 余庆县| 仁化县| 隆回县| 寿光市| 阳城县| 盈江县| 普兰店市|