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

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

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

    隨筆 - 3, 文章 - 152, 評論 - 17, 引用 - 0
    數據加載中……

    [轉]4個有用的filter

    一、字符編碼的過濾器
    import?javax.servlet.*;?
    import?java.io.IOException;?

    /**?
    *?用于設置?HTTP?請求字符編碼的過濾器,通過過濾器參數encoding指明使用何種字符編碼,用于處理Html?Form請求參數的中文問題?
    */
    ?
    public?class?CharacterEncodingFilter?
    implements?Filter?
    {?
    protected?FilterConfig?filterConfig?=?null;?
    protected?String?encoding?=?"";?

    public?void?doFilter(ServletRequest?servletRequest,?ServletResponse?servletResponse,?FilterChain?filterChain)?throws?IOException,?ServletException?
    {?
    if(encoding?!=?null)?
    servletRequest.setCharacterEncoding(encoding);?
    filterChain.doFilter(servletRequest,?servletResponse);?
    }
    ?

    public?void?destroy()?
    {?
    filterConfig?
    =?null;?
    encoding?
    =?null;?
    }
    ?

    public?void?init(FilterConfig?filterConfig)?throws?ServletException?
    {?
    this.filterConfig?=?filterConfig;?
    this.encoding?=?filterConfig.getInitParameter("encoding");?

    }
    ?
    }
    ?

    二、使瀏覽器不緩存頁面的過濾器
    import?javax.servlet.*;?
    import?javax.servlet.http.HttpServletResponse;?
    import?java.io.IOException;?

    /**?
    *?用于的使?Browser?不緩存頁面的過濾器?
    */
    ?
    public?class?ForceNoCacheFilter?implements?Filter?{?

    public?void?doFilter(ServletRequest?request,?ServletResponse?response,?FilterChain?filterChain)?throws?IOException,?ServletException?
    {?
    ((HttpServletResponse)?response).setHeader(
    "Cache-Control","no-cache");?
    ((HttpServletResponse)?response).setHeader(
    "Pragma","no-cache");?
    ((HttpServletResponse)?response).setDateHeader?(
    "Expires",?-1);?
    filterChain.doFilter(request,?response);?
    }
    ?

    public?void?destroy()?{?
    }
    ?

    public?void?init(FilterConfig?filterConfig)?throws?ServletException?{?
    }
    ?
    }
    ?

    三、檢測用戶是否登陸的過濾器
    import?javax.servlet.*;?
    import?javax.servlet.http.HttpServletRequest;?
    import?javax.servlet.http.HttpServletResponse;?
    import?javax.servlet.http.HttpSession;?
    import?java.util.List;?
    import?java.util.ArrayList;?
    import?java.util.StringTokenizer;?
    import?java.io.IOException;?

    /**?
    *?用于檢測用戶是否登陸的過濾器,如果未登錄,則重定向到指的登錄頁面?


    *?配置參數?


    *?checkSessionKey?需檢查的在?Session?中保存的關鍵字?

    *?redirectURL?如果用戶未登錄,則重定向到指定的頁面,URL不包括?ContextPath?

    *?notCheckURLList?不做檢查的URL列表,以分號分開,并且?URL?中不包括?ContextPath?

    */
    ?
    public?class?CheckLoginFilter?
    implements?Filter?
    {?
    protected?FilterConfig?filterConfig?=?null;?
    private?String?redirectURL?=?null;?
    private?List?notCheckURLList?=?new?ArrayList();?
    private?String?sessionKey?=?null;?

    public?void?doFilter(ServletRequest?servletRequest,?ServletResponse?servletResponse,?FilterChain?filterChain)?throws?IOException,?ServletException?
    {?
    HttpServletRequest?request?
    =?(HttpServletRequest)?servletRequest;?
    HttpServletResponse?response?
    =?(HttpServletResponse)?servletResponse;?

    HttpSession?session?
    =?request.getSession();?
    if(sessionKey?==?null)?
    {?
    filterChain.doFilter(request,?response);?
    return;?
    }
    ?
    if((!checkRequestURIIntNotFilterList(request))?&&?session.getAttribute(sessionKey)?==?null)?
    {?
    response.sendRedirect(request.getContextPath()?
    +?redirectURL);?
    return;?
    }
    ?
    filterChain.doFilter(servletRequest,?servletResponse);?
    }
    ?

    public?void?destroy()?
    {?
    notCheckURLList.clear();?
    }
    ?

    private?boolean?checkRequestURIIntNotFilterList(HttpServletRequest?request)?
    {?
    String?uri?
    =?request.getServletPath()?+?(request.getPathInfo()?==?null???""?:?request.getPathInfo());?
    return?notCheckURLList.contains(uri);?
    }
    ?

    public?void?init(FilterConfig?filterConfig)?throws?ServletException?
    {?
    this.filterConfig?=?filterConfig;?
    redirectURL?
    =?filterConfig.getInitParameter("redirectURL");?
    sessionKey?
    =?filterConfig.getInitParameter("checkSessionKey");?

    String?notCheckURLListStr?
    =?filterConfig.getInitParameter("notCheckURLList");?

    if(notCheckURLListStr?!=?null)?
    {?
    StringTokenizer?st?
    =?new?StringTokenizer(notCheckURLListStr,?";");?
    notCheckURLList.clear();?
    while(st.hasMoreTokens())?
    {?
    notCheckURLList.add(st.nextToken());?
    }
    ?
    }
    ?
    }
    ?
    }
    ?

    四、資源保護過濾器
    package?catalog.view.util;?

    import?javax.servlet.Filter;?
    import?javax.servlet.FilterConfig;?
    import?javax.servlet.ServletRequest;?
    import?javax.servlet.ServletResponse;?
    import?javax.servlet.FilterChain;?
    import?javax.servlet.ServletException;?
    import?javax.servlet.http.HttpServletRequest;?
    import?java.io.IOException;?
    import?java.util.Iterator;?
    import?java.util.Set;?
    import?java.util.HashSet;?
    //?
    import?org.apache.commons.logging.Log;?
    import?org.apache.commons.logging.LogFactory;?

    /**?
    *?This?Filter?class?handle?the?security?of?the?application.?
    *?
    *?It?should?be?configured?inside?the?web.xml.?
    *?
    *?
    @author?Derek?Y.?Shen?
    */
    ?
    public?class?SecurityFilter?implements?Filter?{?
    //the?login?page?uri?
    private?static?final?String?LOGIN_PAGE_URI?=?"login.jsf";?

    //the?logger?object?
    private?Log?logger?=?LogFactory.getLog(this.getClass());?

    //a?set?of?restricted?resources?
    private?Set?restrictedResources;?

    /**?
    *?Initializes?the?Filter.?
    */
    ?
    public?void?init(FilterConfig?filterConfig)?throws?ServletException?{?
    this.restrictedResources?=?new?HashSet();?
    this.restrictedResources.add("/createProduct.jsf");?
    this.restrictedResources.add("/editProduct.jsf");?
    this.restrictedResources.add("/productList.jsf");?
    }
    ?

    /**?
    *?Standard?doFilter?object.?
    */
    ?
    public?void?doFilter(ServletRequest?req,?ServletResponse?res,?FilterChain?chain)?
    throws?IOException,?ServletException?{?
    this.logger.debug("doFilter");?

    String?contextPath?
    =?((HttpServletRequest)req).getContextPath();?
    String?requestUri?
    =?((HttpServletRequest)req).getRequestURI();?

    this.logger.debug("contextPath?=?"?+?contextPath);?
    this.logger.debug("requestUri?=?"?+?requestUri);?

    if?(this.contains(requestUri,?contextPath)?&&?!this.authorize((HttpServletRequest)req))?{?
    this.logger.debug("authorization?failed");?
    ((HttpServletRequest)req).getRequestDispatcher(LOGIN_PAGE_URI).forward(req,?res);?
    }
    ?
    else?{?
    this.logger.debug("authorization?succeeded");?
    chain.doFilter(req,?res);?
    }
    ?
    }
    ?

    public?void?destroy()?{}?

    private?boolean?contains(String?value,?String?contextPath)?{?
    Iterator?ite?
    =?this.restrictedResources.iterator();?

    while?(ite.hasNext())?{?
    String?restrictedResource?
    =?(String)ite.next();?

    if?((contextPath?+?restrictedResource).equalsIgnoreCase(value))?{?
    return?true;?
    }
    ?
    }
    ?

    return?false;?
    }
    ?

    private?boolean?authorize(HttpServletRequest?req)?{?

    //處理用戶登錄?
    /*?UserBean?user?=?(UserBean)req.getSession().getAttribute(BeanNames.USER_BEAN);?

    if?(user?!=?null?&&?user.getLoggedIn())?{?
    //user?logged?in?
    return?true;?
    }?
    else?{?
    return?false;?
    }
    */
    ?
    }
    ?
    }
    ?

    五 利用Filter限制用戶瀏覽權限

    在一個系統中通常有多個權限的用戶。不同權限用戶的可以瀏覽不同的頁面。使用Filter進行判斷不僅省下了代碼量,而且如果要更改的話只需要在Filter文件里動下就可以。
    以下是Filter文件代碼:

    import?java.io.IOException;?


    import?javax.servlet.Filter;?
    import?javax.servlet.FilterChain;?
    import?javax.servlet.FilterConfig;?
    import?javax.servlet.ServletException;?
    import?javax.servlet.ServletRequest;?
    import?javax.servlet.ServletResponse;?
    import?javax.servlet.http.HttpServletRequest;?

    public?class?RightFilter?implements?Filter?{?

    public?void?destroy()?{?

    }
    ?

    public?void?doFilter(ServletRequest?sreq,?ServletResponse?sres,?FilterChain?arg2)?throws?IOException,?ServletException?{?
    //?獲取uri地址?
    HttpServletRequest?request=(HttpServletRequest)sreq;?
    String?uri?
    =?request.getRequestURI();?
    String?ctx
    =request.getContextPath();?
    uri?
    =?uri.substring(ctx.length());?
    //判斷admin級別網頁的瀏覽權限?
    if(uri.startsWith("/admin"))?{?
    if(request.getSession().getAttribute("admin")==null)?{?
    request.setAttribute(
    "message","您沒有這個權限");?
    request.getRequestDispatcher(
    "/login.jsp").forward(sreq,sres);?
    return;?
    }
    ?
    }
    ?
    //判斷manage級別網頁的瀏覽權限?
    if(uri.startsWith("/manage"))?{?
    //這里省去?
    }
    ?
    }
    ?
    //下面還可以添加其他的用戶權限,省去。?

    }
    ?

    public?void?init(FilterConfig?arg0)?throws?ServletException?{?

    }
    ?

    }?

    <!--?判斷頁面的訪問權限?-->?
    <filter>?
    <filter-name>RightFilter</filter-name>?
    <filter-class>cn.itkui.filter.RightFilter</filter-class>?
    </filter>?
    <filter-mapping>?
    <filter-name>RightFilter</filter-name>?
    <url-pattern>/admin/*</url-pattern>?
    </filter-mapping>?
    <filter-mapping>?
    <filter-name>RightFilter</filter-name>?
    <url-pattern>/manage/*</url-pattern>?
    </filter-mapping>?

    在web.xml中加入Filter的配置,如下:?
    <filter>?

    <filter-name>EncodingAndCacheflush</filter-name>?
    <filter-class>EncodingAndCacheflush</filter-class>?
    <init-param>?
    <param-name>encoding</param-name>?
    <param-value>UTF-8</param-value>?
    </init-param>?
    </filter>?
    <filter-mapping>?
    <filter-name>EncodingAndCacheflush</filter-name>?
    <url-pattern>/*</url-pattern>?
    </filter-mapping>?

    要傳遞參數的時候最好使用form進行傳參,如果使用鏈接的話當中文字符的時候過濾器轉碼是不會起作用的,還有就是頁面上

    form的method也要設置為post,不然過濾器也起不了作用。

    ?

    posted on 2006-10-18 08:58 閱讀(93) 評論(0)  編輯  收藏 所屬分類: J2ee

    主站蜘蛛池模板: 99久久亚洲精品无码毛片| 亚洲精品无码久久久久sm| 亚洲精品伊人久久久久| 5555在线播放免费播放| 亚洲经典在线中文字幕| 最近中文字幕完整版免费高清| 久久国产亚洲观看| 永久黄色免费网站| 亚洲一区二区三区无码国产| 亚洲精品免费网站| 亚洲中文字幕久久精品蜜桃| 在线观看免费成人| 麻豆安全免费网址入口| 亚洲视频在线一区二区| 91视频免费观看| 亚洲最大在线视频| 成人性生免费视频| 羞羞视频免费网站入口| 久久久久亚洲爆乳少妇无| 黄网站色视频免费在线观看的a站最新| 亚洲国产精品久久久天堂| 日本在线看片免费人成视频1000| 亚洲第一成年网站大全亚洲| 91免费资源网站入口| 国产精品亚洲专区在线播放| 久久99亚洲综合精品首页| 一级毛片成人免费看免费不卡| 亚洲码一区二区三区| 情侣视频精品免费的国产| 精品一区二区三区高清免费观看| 久久久久久久久亚洲| 国产精品美女午夜爽爽爽免费| 337p日本欧洲亚洲大胆人人| 亚洲人成77777在线播放网站| 国产精品视频免费| 夜夜爽妓女8888视频免费观看| 亚洲爆乳精品无码一区二区三区| 国产99视频精品免费观看7| 黄色网址免费在线| 亚洲国产成人无码av在线播放| 国产精品免费视频一区|