JAVA過濾器

   前面也說過,過濾和攔截是一個項目安全的基礎,一個項目必須要有基本的攔截功能。 試想    如果 一個普通用戶可以毫無阻攔的進入你的後臺管理,那根本毫無安全性可言。下面我們就來看看過濾器如何製作。

首先,新建一個繼承Filter接口的JAVA類  其功能代碼如下:

  1.  
  2. import java.io.IOException;  
  3. import javax.servlet.Filter;  
  4. import javax.servlet.FilterChain;  
  5. import javax.servlet.FilterConfig;  
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.ServletRequest;  
  8. import javax.servlet.ServletResponse;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11. import javax.servlet.http.HttpSession;  
  12.  
  13. public class FrontAuthFilter implements Filter {  
  14.  
  15.     public void destroy() {  
  16.     }  
  17.  
  18.     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,  
  19.             FilterChain filterChain) throws IOException, ServletException {  
  20.         /**  
  21.          * 1,doFilter方法的第一個參數爲ServletRequest對象。此對象給過濾器提供了對進入的信息(包括  
  22.          * 表單數據、cookie和HTTP請求頭)的完全訪問。第二個參數爲ServletResponse,通常在簡單的過  
  23.          * 濾器中忽略此參數。最後一個參數爲FilterChain,此參數用來調用servlet或JSP頁。  
  24.          */ 
  25.         HttpServletRequest request = (HttpServletRequest) servletRequest;  
  26.         /**  
  27.          * 如果處理HTTP請求,並且需要訪問諸如getHeader或getCookies等在ServletRequest中  
  28.          * 無法得到的方法,就要把此request對象構造成HttpServletRequest  
  29.          */ 
  30.         HttpServletResponse response = (HttpServletResponse) servletResponse;  
  31.         String currentURL = request.getRequestURI(); //取得根目錄所對應的絕對路徑:  
  32.         String targetURL = currentURL.substring(currentURL.indexOf("/"1),  
  33.                 currentURL.length()); //截取到當前文件名用於比較  
  34.         HttpServletRequest req = (HttpServletRequest) request;  
  35.         String url = req.getRequestURL().toString();  
  36.  
  37.         HttpSession session = request.getSession(false);  
  38.         if (!"/login.jsp".equals(targetURL)) {  
  39. //判斷當前頁是否是重定向以後的登錄頁面頁面,如果是就不做session的判斷,防止出現死循環  
  40.  
  41.             if (session == null || session.getAttribute("examusers_name") == null) {  
  42. //*用戶登錄以後需手動添加session  
  43.                 response.sendRedirect(request.getContextPath() + "/login.jsp");  
  44. //如果session爲空表示用戶沒有登錄就重定向到login.jsp頁面  
  45.                 return;  
  46.             }  
  47.         }  
  48. //加入filter鏈繼續向下執行  
  49.         if (!"action".equals(url.substring(url.length() - 6, url.length()))) {  
  50.         }  
  51.         filterChain.doFilter(request, response);  
  52.     }  
  53.  
  54.     public void init(FilterConfig filterConfig) throws ServletException {  
  55.     }  
  56.     /**  
  57.      * 調用FilterChain對象的doFilter方法。Filter接口的doFilter方法取一個FilterChain對象作 爲它  
  58.      * 的一個參數。在調用此對象的doFilter方法時,激活下一個相關的過濾器。如果沒有另  
  59.      * 一個過濾器與servlet或JSP頁面關聯,則servlet或JSP頁面被激活。  
  60.      */  

如何將它變成你的       基本上修改1,2處即可 

1.判斷狀態的值            修改變量名即可  注意:session==null  不可除去   

  1. if (session == null || session.getAttribute("examusers_name") == null) { 

2.路徑  

  1. if (!"/login.jsp (修改這裏 爲你的登陸頁面)".equals(targetURL)) {  
  2. 判斷當前頁是否是重定向以後的登錄頁面頁面,如果是就不做session的判斷,防止出現死循環  
  3.  
  4.           if (session == null || session.getAttribute("examusers_name") == null) {  
  5. *用戶登錄以後需手動添加session  
  6.               response.sendRedirect(request.getContextPath() + "/login.jsp(修改這裏 爲你的登陸頁面)");  
  7. 如果session爲空表示用戶沒有登錄就重定向到login.jsp頁面  
  8.               return;  
  9.           }  
  10.       } 

好了  過濾器就寫好了   接下來調用即可   這裏需要修改web.xml文件

  1. <filter> 
  2.        <filter-name>FrontAuthFilter</filter-name> 
  3.        <filter-class>org.yzsoft.examdemo.util.FrontAuthFilter</filter-class> 
  4.    </filter> 
  5.    <filter-mapping> 
  6.        <filter-name>FrontAuthFilter</filter-name> 
  7.        <url-pattern>/front/*</url-pattern> 
  8.    </filter-mapping> 

 <filter-class>這裏是你過濾器的位置</filter-class>

<url-pattern>這裏則是需要過濾的目錄  如我需要過濾back目錄的所有頁面 /back/*  </url-pattern> 

需要注意個問題  登陸頁面不能被過濾  原理就像這個

拿鑰匙開保險櫃一樣     假如  你所需要保存的東西保存在保險櫃裏 

然後必須有一把鑰匙開鎖    但是如果你將鑰匙也鎖在保險櫃    那就永遠也開不了鎖

然而 將登陸頁包含在過濾目錄下就像將鑰匙鎖在保險櫃是一樣的   

好了,話不多說。

--------------------------------------------------------------------------------

 謝謝觀看  小弟新手 有什麼不足 麻煩指出  在此謝謝了 

 

chenwei51製作   請尊重作者  轉帖 需註明原地址    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章