jsp 之Filter__js

來源:互聯網
上載者:User

(1) 請求資訊編碼轉化的Filter

importjava.io.IOException;
importjava.util.Enumeration;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
public class EncodeFilter implementsFilter{
 private FilterConfig  filterConfig=null;
 private String encoding=null;
 //預設建構函式
 public EncodeFilter(){
 }
 //初始化過濾器
 public void init(FilterConfig filterConfig)throwsServletException{
  this.filterConfig=filterConfig;
  this.encoding=filterConfig.getInitParameter("encoding");
 }
 //得到編碼
 private String getEncoding(){
  return this.encoding;
 }
 //執行過濾操作
 public void doFilter(ServletRequestrequest,ServletResponseresponse,
           FilterChainfilterChain)throws
  IOException,ServletException{
  //設定編碼格式
  if(request.getCharacterEncoding()==null){

      //從設定檔得到編碼
   String encoding=getEncoding();

     //設定編碼
   if(encoding!=null){
    request.setCharacterEncoding(encoding);
   }
   //傳遞過濾器
   filterChain.doFilter(request,response);
  }
 }
 public void destroy(){
  filterConfig=null;
  encoding=null;
 }
}

 

web.xml檔案配置

<filter>
  <filter-name>SetEncodingFilter</filter-name>
  <filter-class>cn.mblogger.mydeman.EncodeFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>GBK</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>SetEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping> 

 

 

(2) 檢測使用者是否登陸的過濾器

/**
 用於檢測使用者是否登陸的過濾器,如果未登入,則重新導向到指的登入頁面
 checkSessionKey 需檢查的在 Session 中儲存的關鍵字
 */

public class CheckLoginFilter implements Filter {
 protected FilterConfig filterConfig = null;
 private String redirectURL = null;
 private String sessionKey = null;
 
 public void init(FilterConfig filterConfig) throws ServletException {
  this.filterConfig = filterConfig;
  redirectURL = filterConfig.getInitParameter("redirectURL");
  sessionKey = filterConfig.getInitParameter("checkSessionKey");
 }
 
 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 (session.getAttribute(sessionKey)!=null) {//如果已經登入了,執行其它的Filter
       //filterChain.doFilter(request, response);  繼續下一個過濾器

       request.getRequestDispatcher("/admin/index.jsp");

       return;
  } else {
   response.sendRedirect("/login.jsp");
  }
 }

 public void destroy(){
  
 }
}

 對過濾鏈的說明

比如上面兩個filter 一個是處理文字編碼,一個是處理許可權

1、執行EncodingFilter類doFilter()中chain.doFilter()之前的部分:request.setCharacterEncoding(encoding);
2、執行CheckLoginFilter類doFilter()中chain.doFilter()之前的部分:判斷使用者是否已登入。
3、如果使用者已登入,則訪問請求的資源:/admin/index.jsp。
4、如果使用者未登入,則頁面重新導向到:/login.jsp。
5、執行CheckLoginFilter類doFilter()中chain.doFilter()之後的部分:執行return語句返回方法
6、執行EncodingFilter類doFilter()中chain.doFilter()之後的部分:這裡也沒有代碼。
過濾鏈的好處是,執行過程中任何時候都可以打斷,只要不執行chain.doFilter()就不會再執行後面的過濾器和請求的內容。
而在實際使用時,就要特別注意過濾鏈的執行順序問題,像EncodingFilter就一定要放在所有過濾器
之前,這樣才能確保在使用請求中的資料前設定正確的編碼。

(3) 使瀏覽器不快取頁面面的過濾器

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{ 
 
   }   
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.