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

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

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

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

    [轉(zhuǎn)]4個有用的filter

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

    /**?
    *?用于設(shè)置?HTTP?請求字符編碼的過濾器,通過過濾器參數(shù)encoding指明使用何種字符編碼,用于處理Html?Form請求參數(shù)的中文問題?
    */
    ?
    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;?

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


    *?配置參數(shù)?


    *?checkSessionKey?需檢查的在?Session?中保存的關(guān)鍵字?

    *?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限制用戶瀏覽權(quán)限

    在一個系統(tǒng)中通常有多個權(quán)限的用戶。不同權(quán)限用戶的可以瀏覽不同的頁面。使用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級別網(wǎng)頁的瀏覽權(quán)限?
    if(uri.startsWith("/admin"))?{?
    if(request.getSession().getAttribute("admin")==null)?{?
    request.setAttribute(
    "message","您沒有這個權(quán)限");?
    request.getRequestDispatcher(
    "/login.jsp").forward(sreq,sres);?
    return;?
    }
    ?
    }
    ?
    //判斷manage級別網(wǎng)頁的瀏覽權(quán)限?
    if(uri.startsWith("/manage"))?{?
    //這里省去?
    }
    ?
    }
    ?
    //下面還可以添加其他的用戶權(quán)限,省去。?

    }
    ?

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

    }
    ?

    }?

    <!--?判斷頁面的訪問權(quán)限?-->?
    <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>?

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

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

    ?

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

    主站蜘蛛池模板: 国产一级淫片a免费播放口之| 国产亚洲美女精品久久久| a毛片免费全部在线播放**| 成人区精品一区二区不卡亚洲| 国产亚洲综合成人91精品 | 亚洲日韩精品国产一区二区三区| 久久这里只精品国产免费10| 美女视频黄a视频全免费网站色| 亚洲人成黄网在线观看| 亚洲成在人线av| 中国亚洲女人69内射少妇| 蜜臀91精品国产免费观看| 四虎1515hh永久久免费| 七色永久性tv网站免费看| 色多多www视频在线观看免费| 亚洲色大成网站www久久九| 亚洲国产成a人v在线| 亚洲AV无码一区二区三区系列 | 亚洲中文字幕久久久一区| 亚洲精品在线播放视频| 亚洲s色大片在线观看| 中文字幕亚洲一区| 亚洲色偷偷狠狠综合网| 免费人成网站在线播放| 日韩在线免费播放| 国产精品久久香蕉免费播放| 青青青国产手机频在线免费观看| 中文字幕免费在线播放| 国产午夜精品理论片免费观看| 一本岛v免费不卡一二三区| 又硬又粗又长又爽免费看 | 风间由美在线亚洲一区| 亚洲精品无播放器在线播放 | 皇色在线视频免费网站| 成人免费观看一区二区| 天天影院成人免费观看| 午夜免费1000部| 成全视频免费高清| 国产青草视频在线观看免费影院| 好大好深好猛好爽视频免费| 日本免费无遮挡吸乳视频电影|