IT人生
          專注于java相關技術.
          posts - 53,comments - 87,trackbacks - 0
          一、字符編碼的過濾器
          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,不然過濾器也起不了作用。

          轉自:http://www.aygfsteel.com/zzheng/archive/2008/09/05/227305.html
          減肥瘦身品總匯     值得信賴*脈脈美妝*正品現貨謝絕講價     〓深港商盟〓名品歐衣坊(美國休閑品牌AF系列)     QQ三國游戲幣及道具專賣店     小臉紅紅的瘦身旗艦店減肥瘦身品總匯     值得信賴*脈脈美妝*正品現貨謝絕講價     〓深港商盟〓名品歐衣坊(美國休閑品牌AF系列)     QQ三國游戲幣及道具專賣店     小臉紅紅的瘦身旗艦店減肥瘦身品總匯     值得信賴*脈脈美妝*正品現貨謝絕講價     〓深港商盟〓名品歐衣坊(美國休閑品牌AF系列)     QQ三國游戲幣及道具專賣店     小臉紅紅的瘦身旗艦店



          減肥瘦身品總匯     值得信賴*脈脈美妝*正品現貨謝絕講價     〓深港商盟〓名品歐衣坊(美國休閑品牌AF系列)     QQ三國游戲幣及道具專賣店     小臉紅紅的瘦身旗艦店
          posted on 2009-05-03 17:48 龍華城 閱讀(744) 評論(2)  編輯  收藏

          FeedBack:
          # re: Servlet過濾器大全 (轉)
          2009-05-06 09:37 | 葛坤進
          使瀏覽器不緩存頁面的過濾器
          覺得這個Filter用的比較好,以前項目開發中一些jsp頁面里都是寫腳本代碼的,結果不停的ctrl+c、ctrl+v!  回復  更多評論
            
          # re: Servlet過濾器大全 (轉)
          2009-05-06 10:28 | 龍華城
          @葛坤進
          轉載一些經典文章頁不錯嘛,分享嘛,有原創地址的我也都會加上。有時工作中遇到的問題,解決了,也會發表一下,分享知識。  回復  更多評論
            

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


          網站導航:
           
          主站蜘蛛池模板: 安多县| 开原市| 凌海市| 萍乡市| 乐至县| 禹州市| 昌黎县| 凌云县| 南皮县| 伊吾县| 高淳县| 临夏市| 晋中市| 榆树市| 安达市| 沂水县| 刚察县| 阜新| 镇宁| 广元市| 醴陵市| 兴山县| 宁国市| 丰台区| 广南县| 连城县| 盘山县| 阿坝| 郯城县| 五台县| 仁寿县| 福建省| 巴南区| 南平市| 东乡族自治县| 赫章县| 富阳市| 杭州市| 马鞍山市| 开平市| 措美县|