Java--Filter(過濾器)


Java--Filter(過濾器)

博客說明

文章所涉及的資料來自互聯網整理和個人總結,意在於個人學習和經驗匯總,如有什么地方侵權,請聯系本人刪除,謝謝!

簡介

Filter也稱之為過濾器,它是Servlet技術中最實用的技術,Web開發人員通過Filter技術,對web服務器管理的所有web資源,例如Jsp, Servlet, 靜態圖片文件或靜態 html 文件等進行攔截,從而實現一些特殊的功能。

實現URL級別的權限訪問控制、過濾敏感詞匯、壓縮響應信息等一些高級功能。

配置

注解方式
@WebFilter("/*")//訪問所有資源之前,都會執行該過濾器
public class Filter implements Filter {
		    @Override
		    public void init(FilterConfig filterConfig) throws ServletException {
		
		    }
		
		    @Override
		    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
		        System.out.println("filter被執行了....");
		        //放行
		        filterChain.doFilter(servletRequest,servletResponse);
		
		    }
		
		    @Override
		    public void destroy() {
		
		    }
		}
web.xml
<filter>
	        <filter-name>demo1</filter-name>
	        <filter-class>cn.itcast.web.filter.FilterDemo1</filter-class>
	    </filter>
	    <filter-mapping>
	        <filter-name>demo1</filter-name>
			<!-- 攔截路徑 -->
	        <url-pattern>/*</url-pattern>
	    </filter-mapping>

過濾器生命周期方法

init

在服務器啟動后,會創建Filter對象,然后調用init方法。只執行一次。用於加載資源

doFilter

每一次請求被攔截資源時,會執行。執行多次

destroy

在服務器關閉后,Filter對象被銷毀。如果服務器是正常關閉,則會執行destroy方法。只執行一次。用於釋放資源

過濾器配置詳解

攔截路徑配置
  • 具體資源路徑: /index.jsp 只有訪問index.jsp資源時,過濾器才會被執行

  • 攔截目錄: /user/* 訪問/user下的所有資源時,過濾器都會被執行

  • 后綴名攔截: *.jsp 訪問所有后綴名為jsp資源時,過濾器都會被執行

  • 攔截所有資源:/* 訪問所有資源時,過濾器都會被執行

攔截方式配置:資源被訪問的方式
  • 注解配置:

    • 設置dispatcherTypes屬性
      1. REQUEST:默認值。瀏覽器直接請求資源
      2. FORWARD:轉發訪問資源
      3. INCLUDE:包含訪問資源
      4. ERROR:錯誤跳轉資源
      5. ASYNC:異步訪問資源
  • web.xml配置

    • 設置標簽

      <dispatcher></dispatcher>
      

配置多個過濾器

  • 執行順序:如果有兩個過濾器:過濾器1和過濾器2,具體過程?

    過濾器1
    
    過濾器2
    
    資源執行
    
    過濾器2
    
    過濾器1
    

過濾器先后順序問題

有兩個過濾器先執行哪一個?

  1. 注解配置:按照類名的字符串比較規則比較,值小的先執行
    • 如: AFilter 和 BFilter,AFilter就先執行了。
  2. web.xml配置: 誰定義在上邊,誰先執行

感謝

黑馬程序員

萬能的網絡

以及勤勞的自己
關注公眾號: 歸子莫,獲取更多的資料,還有更長的學習計划


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM