隨筆 - 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 閱讀(99) 評論(0)  編輯  收藏 所屬分類: J2ee

          主站蜘蛛池模板: 张家口市| 石狮市| 高陵县| 全州县| 马边| 荃湾区| 汤原县| 乌什县| 建湖县| 久治县| 安图县| 广南县| 宕昌县| 偃师市| 新乡县| 旬阳县| 涞水县| 芷江| 杭锦后旗| 武夷山市| 信宜市| 望城县| 新安县| 吉木萨尔县| 十堰市| 泰州市| 邢台县| 邛崃市| 南陵县| 澜沧| 潢川县| 高雄市| 民县| 宿松县| 洞口县| 永仁县| 门头沟区| 鹿邑县| 洛阳市| 咸丰县| 鄢陵县|