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

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

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

    我的Blog我做主^_^

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

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

    ??????? 昨天接到領(lǐng)導(dǎo)指示,要對地市的IP地址進(jìn)行過濾,暈了,過濾啥呀,不過想歸想,那還得做不是,呵呵
    開始想在服務(wù)器<Tomcat>上整一下呢,仔細(xì)一看不行,附Tomcat過濾IP方法:
    限制ip,限制主機(jī)訪問:
    如果想禁止指定的ip或者主機(jī)名來拒絕某些機(jī)器訪問,或者指定某些機(jī)器來訪問。
    也支持分別按Engine, Host, or Context,進(jìn)行以下配置:
    <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
    沒轍,繼續(xù)...
    因為要過濾的IP有七十二組<(58.87.96.0??? 58.57.121.255),(219.147.0.0??? 219.147.0.211)>想到用正則表達(dá)式,因為本人對正則表達(dá)式這東西,實在不精,呵呵,也就沒敢用,呵呵

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

    一、新建一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>

    希望能給用到的朋友減少一下負(fù)擔(dān),呵呵



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

    評論

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

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

    # 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];
    會不會有數(shù)據(jù)溢出問題啊
      回復(fù)  更多評論
      

    # re: IP地址段的過濾 2007-11-23 14:42 java_蟈蟈
    @小雨
    謝謝你的到來,應(yīng)該不會產(chǎn)生數(shù)據(jù)溢出的問題^_^  回復(fù)  更多評論
      


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲人成网站看在线播放| 91亚洲国产成人精品下载| 最新亚洲人成网站在线观看| 一个人免费观看在线视频www | 麻豆高清免费国产一区| 亚洲v高清理论电影| 久久免费国产视频| 久久亚洲精品中文字幕| 最近中文字幕完整免费视频ww | 久久精品国产亚洲av麻豆图片 | 亚洲成a人片在线观看无码| 青柠影视在线观看免费高清| 亚洲视频在线观看免费| 2022久久国产精品免费热麻豆| 亚洲成人一级电影| 嫩草视频在线免费观看| 看成年女人免费午夜视频| 亚洲日韩人妻第一页| 久久国产乱子精品免费女| 亚洲综合无码一区二区三区| 99精品国产免费久久久久久下载 | 久久久久免费看黄a级试看| 久久亚洲美女精品国产精品| 插B内射18免费视频| 污网站在线观看免费| 国产成人A亚洲精V品无码 | 亚洲精品动漫免费二区| 亚洲大码熟女在线观看| 亚洲美女在线国产| 免费精品无码AV片在线观看| 亚洲人成小说网站色| 亚洲色偷偷综合亚洲AV伊人| 精品一区二区三区无码免费视频 | 国产精品亚洲片在线va| 国产a不卡片精品免费观看| a在线免费观看视频| 77777午夜亚洲| 日本红怡院亚洲红怡院最新| 在线观看日本免费a∨视频| 一级特黄特色的免费大片视频| 亚洲欧洲在线观看|