<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的Blog我做主^_^

    走向一條通往JAVA的不歸路...

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      64 隨筆 :: 68 文章 :: 77 評論 :: 0 Trackbacks

    ??????? 昨天接到領導指示,要對地市的IP地址進行過濾,暈了,過濾啥呀,不過想歸想,那還得做不是,呵呵
    開始想在服務器<Tomcat>上整一下呢,仔細一看不行,附Tomcat過濾IP方法:
    限制ip,限制主機訪問:
    如果想禁止指定的ip或者主機名來拒絕某些機器訪問,或者指定某些機器來訪問。
    也支持分別按Engine, Host, or Context,進行以下配置:
    <Context path="/examples" ...> ...
    <Valve className="org.apache.catalina.valves.RemoteHostValve"
    allow="*.mycompany.com,www.yourcompany.com"/>
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
    deny="192.168.1.*"/>
    </Context>
    參考:
    http://jakarta.apache.org/tomcat/tomcat-5.0-doc/config/context.html
    沒轍,繼續...
    因為要過濾的IP有七十二組<(58.87.96.0??? 58.57.121.255),(219.147.0.0??? 219.147.0.211)>想到用正則表達式,因為本人對正則表達式這東西,實在不精,呵呵,也就沒敢用,呵呵

    最終在于朋友交流后,采取如下形式解決的:

    一、新建一xml配置文件,將要過濾的IP段寫入;
    二、新建一Filter,完成過濾要求
    代碼如下所示:
    IP.XML
    <?xml version="1.0" encoding="UTF-8"?>
    <root id="allow">
    ?? <group>???
    ??? <start>122.6.192.0</start>
    ??? <end>122.6.255.255</end>
    ?? </group>
    ?? <group>???
    ??? <start>219.146.208.0</start>
    ??? <end>219.146.215.255</end>
    ?? </group>
    ?? <group>???
    ??? <start>222.174.224.0</start>
    ??? <end>222.174.255.255</end>
    ?? </group>
    </root>
    Filter如下所示:
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NodeList;

    import javax.xml.parsers.*;


    public class FilterServlet??? extends HttpServlet??? implements Filter {
    ?

    ? private Document doc=null;
    ? private FilterConfig filterConfig;
    ? //Handle the passed-in FilterConfig
    ? private String encoding = "GBK";
    ?
    ? public void init(FilterConfig filterConfig) {
    ??? this.filterConfig = filterConfig;
    ? }

    ? //Process the request/response pair
    ? public void doFilter(ServletRequest request, ServletResponse response,
    ?????????????????????? FilterChain filterChain) {
    ??
    ?? HttpServletResponse httpResp = null;
    ?? HttpServletRequest httpReq = null;

    ??? try {

    ????? String reqip = request.getRemoteHost();
    ????? if(null != reqip){???????
    ??????????reqip = reqip.replace('.','_');
    ????? }
    ????? String[] temp = reqip.split("_");
    ????? int[] ip = new int[temp.length];
    ?????
    ????? for(int i=0;i<temp.length;i++){???????
    ??????????ip[i] = new Integer(temp[i]).intValue();
    ????? }
    ????? if (response instanceof HttpServletResponse) {
    ??? ??
    ??? ?? httpReq = (HttpServletRequest)request;
    ??? ?? httpResp = (HttpServletResponse)response;
    ????? if(!viewXml(httpReq.getRealPath("/")+"/WEB-INF/ip.xml",ip)){
    ???????
    ?????? httpResp.sendRedirect("
    http://welcome.sd.vnet.cn/ ");
    ????? }
    ????? filterChain.doFilter(request, response);
    ??? }
    ??? }
    ??? catch (ServletException sx) {
    ??? ?filterConfig.getServletContext().log(sx.getMessage());
    ??? }
    ??? catch (IOException iox) {
    ????? filterConfig.getServletContext().log(iox.getMessage());
    ??? }catch(Exception e){
    ??? ?
    ??? ?filterConfig.getServletContext().log(e.getMessage());
    ??? }
    ? }
    ?
    ? /**
    ?? * 驗證請求IP是否符合要求
    ?? * @param xmlFile
    ?? * @return
    ?? * @throws Exception
    ?? */
    ? public boolean viewXml(String xmlFile,int[] ip) throws Exception {
    ??
    ?? int[] test = ip;
    ?? boolean flag = true;
    ?? DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
    ?? DocumentBuilder db=dbf.newDocumentBuilder();?
    ?? doc=db.parse(new File(xmlFile));
    ?? Element root = doc.getDocumentElement();
    ????? NodeList list = root.getElementsByTagName("group");

    ????? for (int i=0; i < list.getLength() ; i++) {
    ??????? Element element = (Element)list.item(i);
    ??????? NodeList titleid = element.getElementsByTagName("start");
    ??????? Element idElement = (Element)titleid.item(0);
    ??????? String ip1 = idElement.getFirstChild().getNodeValue();??????
    ??????? ip1 = ip1.replace('.','_');
    ??????? String[] ip1s = ip1.trim().split("_");
    ??????? Integer[] ipl1 = new Integer[ip1s.length];
    ??????? for(int a=0;a<ip1s.length;a++){
    ??????????????????ipl1[a] = new Integer(ip1s[a]);
    ??????? }
    ????????
    ??????? NodeList titleList = element.getElementsByTagName("end");
    ??????? Element titleElement = (Element)titleList.item(0);
    ??????? String ip2 = titleElement.getFirstChild().getNodeValue();
    ??????? ip2 = ip2.replace('.','_');
    ??????? String[] ip2s = ip2.trim().split("_");
    ??????? Integer[] ipl2 = new Integer[ip2s.length];
    ??????? for(int b=0;b<ip2s.length;b++){?????????
    ????????????ipl2[b] = new Integer(ip2s[b]);
    ??????? }
    ????????
    ??????? long test_value = test[0]*255*255*255+test[1]*255*255+test[2]*255+test[3];
    ??????? long ip1_value = ipl1[0]*255*255*255+ipl1[1]*255*255+ipl1[2]*255+ipl1[3];
    ??????? long ip2_value = ipl2[0]*255*255*255+ipl2[1]*255*255+ipl2[2]*255+ipl2[3];
    ???????
    ??????? if(test_value >= ip1_value && test_value <= ip2_value){????????
    ????????????return true;
    ??????? }
    ???????
    ????? }??????
    ????? return false;
    ? }

    ? public void destroy() {
    ??? filterConfig = null;
    ??? encoding = null;
    ? }
    }
    WEB.XML如下:
    <filter>
    ??<filter-name>filterservlet</filter-name>
    ??<filter-class>com.lvke.web.qcbst.util.common.FilterServlet</filter-class>
    ?</filter>
    <filter-mapping>
    ?? <filter-name>filterservlet</filter-name>
    ??<url-pattern>/*</url-pattern>
    ?</filter-mapping>

    希望能給用到的朋友減少一下負擔,呵呵



    posted on 2007-03-23 14:48 java_蟈蟈 閱讀(1478) 評論(4)  編輯  收藏

    評論

    # re: IP地址段的過濾[未登錄] 2007-08-02 15:55 sky
    謝謝了,學習了,我也應用上了,真的感謝這位仁兄,不過上面的
    long test_value = test[0]*255*255*255,這個在 jdk 1.4會報錯,也就是說得配 jdk 1.5,才好一點  回復  更多評論
      

    # re: IP地址段的過濾 2007-09-24 15:25 coolala
    此處的.getRealPath("/")方法。。。。。  回復  更多評論
      

    # re: IP地址段的過濾 2007-11-23 11:09 小雨
    long test_value = test[0]*255*255*255+test[1]*255*255+test[2]*255+test[3];
    long ip1_value = ipl1[0]*255*255*255+ipl1[1]*255*255+ipl1[2]*255+ipl1[3];
    long ip2_value = ipl2[0]*255*255*255+ipl2[1]*255*255+ipl2[2]*255+ipl2[3];
    會不會有數據溢出問題啊
      回復  更多評論
      

    # re: IP地址段的過濾 2007-11-23 14:42 java_蟈蟈
    @小雨
    謝謝你的到來,應該不會產生數據溢出的問題^_^  回復  更多評論
      


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


    網站導航:
     
    主站蜘蛛池模板: 韩国二级毛片免费播放| 在线人成精品免费视频| 日韩电影免费在线观看视频| 亚洲视频免费一区| 韩国免费a级作爱片无码| 日本中文一区二区三区亚洲| 亚洲av无码专区在线电影天堂| 成人黄色免费网站| 亚洲人成电影网站| 99久久免费国产精品特黄| 亚洲精品国产肉丝袜久久| 在线观看免费视频资源| 亚洲国产美女福利直播秀一区二区| 91大神在线免费观看| 亚洲免费黄色网址| 久久精品网站免费观看| 精品国产日韩亚洲一区在线| 亚洲精品成人区在线观看| 两个人日本WWW免费版| 亚洲毛片在线观看| 国产成人精品免费视频动漫| 亚洲午夜无码久久| 国产一区视频在线免费观看| 久久亚洲AV成人无码国产电影 | 精品国产一区二区三区免费| 亚洲av永久无码精品秋霞电影影院 | 99在线热播精品免费99热| 亚洲国产老鸭窝一区二区三区| 精品女同一区二区三区免费站| 亚洲国产精品无码第一区二区三区 | 一级做a爰片久久免费| 日本亚洲成高清一区二区三区 | 亚洲精品视频免费看| 亚洲第一成年免费网站| 亚洲精品美女久久久久99小说| 成人性做爰aaa片免费看| 久久亚洲最大成人网4438| 深夜国产福利99亚洲视频| 久久久久久久久久国产精品免费| 最新国产成人亚洲精品影院| 亚洲伊人成无码综合网|