Filter(過濾器)

文章目錄

  • 過濾器的編寫:
  • 過濾器 API
    • Filter
    • FilterConfig
    • FilterChain
  • 生命周期
  • 過濾器核心方法的細節
  • 多個過濾器執行順序
  • <br />


在這里插入圖片描述

過濾器——Filter,它是JavaWeb三大組件之一。另外兩個是Servlet和Listener。
它是在2000年發布的Servlet2.3規范中加入的一個接口。是Servlet規范中非常實用的技術。
它可以對web應用中的所有資源進行攔截,并且在攔截之后進行一些特殊的操作。
常見應用場景:URL級別的權限控制;過濾敏感詞匯;中文亂碼問題等等。

過濾器的編寫:

@WebFilter(filterName = "FilterDemo2",urlPatterns = "/*")
public class FilterDemo1 implements Filter {/*** 過濾器的核心方法* @param request* @param response* @param chain* @throws IOException* @throws ServletException*/@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {/*** 如果不寫此段代碼,控制臺會輸出兩次:FilterDemo1攔截到了請求。*/HttpServletRequest req = (HttpServletRequest) request;String requestURI = req.getRequestURI();if (requestURI.contains("favicon.ico")) {return;}System.out.println("FilterDemo1攔截到了請求");}
}

過濾器 API

Filter

返回類型 方法 簡介

void init(FilterConfig conf) 用于執行過濾器的初始化工作,web容器會在web項目啟動時自動調用該方法。
void doFilter(ServletRequest request,SerlvetResponse response,FilterChain chain) 當請求和響應被過濾器攔截后,都會交給doFilter來處理:其中兩個參數分別是被攔截request和response對象,可以使用chain的doFliter方法來放行。
void destroy() 用于釋放關閉Filter對象打開的資源,在web項目關閉時,由web容器自動調用該方法。

Filter_API.png
Filter_API2.png

FilterConfig

FilterConfig_API.png

FilterChain

FilterChain_API.png

生命周期

出生當應用加載的時候執行實例化和初始化方法。

活著只要應用一直提供服務,對象就一直存在。

死亡當應用卸載時,或者服務器宕機時,對象消亡。

Filter的實例對象在內存中也只有一份。所以也是單例的。

過濾器核心方法的細節

/*** 過濾器的核心方法*/
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {/*** 如果不寫此段代碼,控制臺會輸出兩次:FilterDemo1攔截到了請求。HttpServletRequest req = (HttpServletRequest) request;String requestURI = req.getRequestURI();if (requestURI.contains("favicon.ico")) {return;}*/System.out.println("FilterDemo1攔截到了請求");//過濾器放行chain.doFilter(request, response);System.out.println("FilterDemo1放行之后,又回到了doFilter方法");
}

測試運行結果,我們發現過濾器放行之后執行完目標資源,仍會回到過濾器中:
filter_demo8.png

多個過濾器執行順序

運行結果
filter_multi_demo.png




在這里插入圖片描述



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718227.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718227.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718227.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Go語言基礎基礎

簡介 Go語言&#xff08;也稱為Golang&#xff09;是一種靜態類型、編譯型語言&#xff0c;由Google的Robert Griesemer、Rob Pike和Ken Thompson于2007年設計&#xff0c;首次公開發布于2009年。Go的設計初衷是解決當時谷歌內部面臨的軟件開發問題&#xff0c;特別是在處理大…

百度文庫旋轉驗證碼識別

最近研究了一下圖像識別&#xff0c;一直找到很好的應用場景&#xff0c;今天我就發現可以用百度的旋轉驗證碼來做一個實驗。沒想到效果還挺好&#xff0c;下面就是實際的識別效果。 1、效果演示 2、如何識別 2.1準備數據集 首先需要使用爬蟲&#xff0c;對驗證碼圖片進行采…

區塊鏈媒體發布推廣10個熱門案例解析-華媒舍

區塊鏈技術的發展已經引起了媒體的廣泛關注&#xff0c;越來越多的區塊鏈媒體紛紛發布推廣相關的熱門案例。本文將介紹10個成功的區塊鏈媒體推廣案例&#xff0c;并分享它們的成功秘訣&#xff0c;幫助讀者更好地了解區塊鏈媒體推廣的方法與技巧。 隨著區塊鏈技術的成熟和應用場…

第二證券:富時羅素擴容 A股引入國際增量資金

日前&#xff0c;英國富時羅素指數公司&#xff08;FTSE Russell&#xff0c;簡稱“富時羅素”&#xff09;公布的全球股票指數&#xff08;FTSE Global Equity Index Series&#xff09;半年度指數檢查陳述顯現&#xff0c;將新調入A股76只、調出1只。此前&#xff0c;富時羅素…

Leetcode 3049. Earliest Second to Mark Indices II

Leetcode 3049. Earliest Second to Mark Indices II 1. 解題思路2. 代碼實現3. 算法優化 題目鏈接&#xff1a;3049. Earliest Second to Mark Indices II 1. 解題思路 這道題我看貌似難度報表&#xff0c;比賽的時候貌似只有36個人搞定了這道題目&#xff0c;然后最快的人…

【LeetCode】升級打怪之路 Day 12:單調隊列

今日題目&#xff1a; 239. 滑動窗口最大值 | LeetCode 今天學習了單調隊列這種特殊的數據結構&#xff0c;思路很新穎&#xff0c;值得學習。 Problem&#xff1a;單調隊列 【必會】 與單調棧類似&#xff0c;單調隊列也是一種特殊的數據結構&#xff0c;它相比與普通的 que…

Get Your Back Covered! Coverage, CodeCov和Tox

1. Coverage - 衡量測試的覆蓋率 我們已經掌握了如何進行單元測試。接下來,一個很自然的問題浮現出來,我們如何知道單元測試的質量呢?這就提出了測試覆蓋率的概念。覆蓋率測量通常用于衡量測試的有效性。它可以顯示您的代碼的哪些部分已被測試過,哪些沒有。 coverage.py …

Arm平臺下各種memcpy優化對比<二>

因memcpy導致tda4vm上的h264解碼占CPU較高而改棄&#xff0c;從網上找到各種memcpy的優化代碼&#xff0c;在一起做了個運行速度對比&#xff0c;請查收&#xff1b; #include <stdio.h> #include <stdlib.h> /* rand, srand */ #include <string.h> #i…

智慧公廁:打造智慧城市的環衛明珠

在城市建設中&#xff0c;公共衛生設施的完善和智能化一直是重要環節。而智慧公廁作為智慧城市建設的重要組成部分&#xff0c;發揮著不可替代的作用。本文以智慧公廁源頭實力廠家廣州中期科技有限公司&#xff0c;大量精品案例現場實景實圖&#xff0c;解讀智慧公廁如何助力打…

【數據結構】B樹

1 B樹介紹 B樹&#xff08;英語&#xff1a;B-tree&#xff09;&#xff0c;是一種在計算機科學自平衡的樹&#xff0c;能夠保持數據有序。這種數據結構能夠讓查找數據、順序訪問、插入數據及刪除的動作&#xff0c;都在對數時間內完成。B樹&#xff0c;概括來說是一個一般化的…

MySQL高可用性攻略:快速搭建MySQL主從復制集群 !

MySQL高可用性攻略&#xff1a;快速搭建MySQL主從復制集群 &#xff01; MySQL基礎知識&#xff1a;介紹MySQL數據庫的基本概念和常用命令&#xff0c;如何創建數據庫、表、用戶和權限管理等。 MySQL安裝教程&#xff1a;Centos7 安裝MySQL5.7.29詳細安裝手冊 MySQL數據類型&…

【大廠AI課學習筆記NO.63】模型的維護

說是模型的維護&#xff0c;其實這堂課都是在講“在工業環境中開發和部署機器學習模型的流程”。 上圖來自于我的筆記思維腦圖&#xff0c;已經上傳&#xff0c;要鏈接的訪問的主頁查看資源。 一路走來&#xff0c;我們學習了數據管理、模型學習、模型驗證、模型部署等重要的步…

arm板運行程序時尋找動態庫的路徑設置

問題&#xff1a;error while loading shared libraries: libQt5Widgets.so.5: cannot open shared object file&#xff1f; 第一種方法---- 解決&#xff1a; ①復制需要用到的arm庫到板子上。 ②pwd指令獲取該庫的絕對路徑&#xff0c;把路徑復制到/etc/ld.so.conf文件 ③輸…

Leetcoder Day37| 動態規劃part04 背包問題

01背包理論基礎 面試掌握01背包&#xff0c;完全背包和重背包就夠用了。 背包問題的理論基礎重中之重是01背包&#xff0c;一定要理解透&#xff01; 01 背包 有n件物品和一個最多能背重量為w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的價值是value[i] 。每件物品…

隱式馬爾科夫算法

隱式馬爾科夫算法 隱式馬爾科夫算法概述算法使用HMM 模型參數設置HMM 模型分類1. Gaussian HMM2. Multinomial HMM3. GMM HMM 其他機器學習算法&#xff1a;機器學習實戰工具安裝和使用 隱式馬爾科夫算法概述 隱式馬爾科夫算法是一種用于處理時序數據的強大工具&#xff0c;其…

css通過calc動態計算寬度

max-width: calc(100% - 40px) .m-mj-status-drawing-info-data{ display: inline-block; margin: 10px; min-width: 200px; padding: 10px;border-radius: 10px; background: #ddd;max-width: calc(100% - 40px);word-wrap: break-word;white-space: pre-line;}我開發的chatg…

計算機二級(Python)真題講解每日一題:《字典字符查找》

描述???????????????????????????????????????????????????????????????????????????????????????????????????????????????? 在右側的答題模板中&#xf…

Crash 實例

1.spinlock原理 為了解決這個spinlock的不公平問題&#xff0c;linux 2.6.25內核以后&#xff0c;spinlock采用了一種"FIFO ticket-based"算法的spinlock機制&#xff0c;可以很好的實現先來先搶占的思想。具體的做法如下&#xff1a; (1)、spinlock的核心字段有ow…

C語言-柔性數組成員的使用

文章目錄 摘要柔性數組成員基本使用細節探究 零長度數組-定長數組-變長數組 摘要 本文先介紹柔性數組成員(flexible array member)的基本使用&#xff0c;然后介紹其內存結構。最后&#xff0c;補充了一些數組相關的其他概念。 柔性數組成員 基本使用 參考: 【C語言內功修煉…

[項目設計] 從零實現的高并發內存池(一)

&#x1f308; 博客個人主頁&#xff1a;Chris在Coding &#x1f3a5; 本文所屬專欄&#xff1a;[高并發內存池] ?? 前置學習專欄&#xff1a;[Linux學習] ? 我們仍在旅途 ? 目錄 前言 項目介紹 1.內存池 1.1 什么是內存池 池化技術 內存池 1.2 為什…