亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring Boot Filter 過濾器的使用方式

 更新時間:2022年09月20日 09:28:22   作者:LP學(xué)長???????  
這篇文章主要介紹了Spring Boot Filter 過濾器的使用方式,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

前言:

要想使用 filter,需要寫一個方法繼承 Filter 類,我們寫如下兩個自己的 Filter 類,首先是 FirstFilter 類,其中 @Order 里邊的數(shù)字越小代表越先被該 Filter 過濾,@WebFilter 代表這是個 Filter 類并把這個類注入到容器中:

/**** imports ****/

@Order(1)
@WebFilter(filterName="firstFilter", urlPatterns="/*")
public class FirstFilter implements Filter {
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
  }

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException {
    System.out.println("first filter 1");
    chain.doFilter(request, response);
    System.out.println("first filter 2");
  }

  @Override
  public void destroy() {
  }
}

然后是第二個 Filter,SecondFilter 類:

/**** imports ****/

@Order(2)
@WebFilter(filterName="secondFilter", urlPatterns="/*")
public class SecondFilter implements Filter {
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
  }

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException {
    System.out.println("second filter 1");
    System.out.println("before:" + response);
    chain.doFilter(request, response);
    System.out.println("after:" + response);
    System.out.println("second filter 2");
  }

  @Override
  public void destroy() {
  }
}

然后我們把 Controller 類也寫出來:

/**** imports ****/

@RestController
public class TestController {
  @GetMapping("/test1")
  public String test1() {
    System.out.println("method in controller");
    return "test1";
  }
}

最后是 Spring Boot 的主方法入口,注意,由于我們使用注解注入的 Filter,所以要在下邊這個 Application 類中加入@ServletComponentScan 注解:

/**** imports ****/

@SpringBootApplication
@ServletComponentScan
public class ExecutorTestApplication {
  public static void main(String[] args) {	
    ConfigurableApplicationContext applicationContext = SpringApplication.run(ExecutorTestApplication.class, args);
  }
}

首先我們先來看一下執(zhí)行結(jié)果,啟動后訪問 127.0.0.1:8080/test1,在后臺中打印如下信息:

我們可以看出代碼執(zhí)行的流程:

  • 請求被 firstFilter 截獲,打印出 first filter 1
  • 執(zhí)行 chain.doFilter(request, response),這句話代表著請求會轉(zhuǎn)發(fā)給過濾器鏈上下一個對象,也就是 secondFilter,所以打印出 secondFilter 里的 second filter 1
  • 執(zhí)行 secondfilter 里的 chain.dofilter() 方法,請求再轉(zhuǎn)發(fā)給下一個對象,由于沒有其他的 filter 了,所以會轉(zhuǎn)發(fā)給 controller,打印出了 controller 類中的 method in controller
  • 內(nèi)存棧里調(diào)用 secondFilter 的 print("second filter 2")
  • 內(nèi)存棧里調(diào)用 firstfilter 的 print("first filter 1")

所以如果在自己實(shí)現(xiàn)的 Filter 類的 doFilter 方法里不加 chain.doFilter(req, rep) 是不行的,那樣會導(dǎo)致請求到了這個 filter 里就不再往下走了,永遠(yuǎn)進(jìn)不了 controller 中。

我們也可以在 print("before:" + response) 和 print("after:" + response) 這兩個地方打上斷點(diǎn),然后調(diào)試一下,會發(fā)現(xiàn)在 before 那里的 response 里是什么都么有的,而在 after 那里的 response 里則是已經(jīng)有了 test1 字符串,也就是說 controller 類 test1 方法的返回值已經(jīng)添加進(jìn)了 response,所以如果想要對請求的 response 做一下過濾處理,那么要在 chain.doFilter(res, rep) 之后寫你的邏輯。

到此這篇關(guān)于Spring Boot Filter 過濾器的使用方式的文章就介紹到這了,更多相關(guān)Spring Boot Filter 過濾器 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java通過在主循環(huán)中判斷Boolean來停止線程的方法示例

    Java通過在主循環(huán)中判斷Boolean來停止線程的方法示例

    這篇文章主要介紹了Java通過在主循環(huán)中判斷Boolean來停止線程的方法,結(jié)合具體實(shí)例形式分析了java針對線程的判斷與停止操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-04-04
  • 在CentOS系統(tǒng)上安裝Java的openjdk的方法

    在CentOS系統(tǒng)上安裝Java的openjdk的方法

    這篇文章主要介紹了在CentOS系統(tǒng)上安裝Java的openjdk的方法,同樣適用于Fedora等其他RedHat系的Linux系統(tǒng),需要的朋友可以參考下
    2015-06-06
  • Java1.8中StringJoiner的使用及源碼詳析

    Java1.8中StringJoiner的使用及源碼詳析

    在看String類時,看到有使用StringJoiner類,所以順便看了下StringJoiner類,下面這篇文章主要給大家介紹了關(guān)于Java 1.8中StringJoiner的使用及源碼分析的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-08-08
  • SpringBoot項目如何打war包問題詳解

    SpringBoot項目如何打war包問題詳解

    傳統(tǒng)的部署方式:將項目打成war包,放入tomcat的webapps目錄下面,啟動tomcat,即可訪問.文中有非常詳細(xì)的介紹,對正在學(xué)習(xí)springboot的小伙伴很有幫助,需要的朋友可以參考下
    2021-05-05
  • Spring中的ImportSelector接口原理解析

    Spring中的ImportSelector接口原理解析

    這篇文章主要介紹了Spring中的ImportSelector接口原理解析,ImportSelector接口是spring中導(dǎo)入外部配置的核心接口,根據(jù)給定的條件(通常是一個或多個注釋屬性)判定要導(dǎo)入那個配置類,需要的朋友可以參考下
    2024-01-01
  • java實(shí)現(xiàn)ArrayList根據(jù)存儲對象排序功能示例

    java實(shí)現(xiàn)ArrayList根據(jù)存儲對象排序功能示例

    這篇文章主要介紹了java實(shí)現(xiàn)ArrayList根據(jù)存儲對象排序功能,結(jié)合實(shí)例形式分析了java針對ArrayList的相關(guān)運(yùn)算、排序操作技巧,需要的朋友可以參考下
    2018-01-01
  • Java枚舉的七種常見用法總結(jié)(必看)

    Java枚舉的七種常見用法總結(jié)(必看)

    下面小編就為大家?guī)硪黄狫ava枚舉的七種常見用法總結(jié)(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • Java單例模式的6種實(shí)現(xiàn)方式詳解

    Java單例模式的6種實(shí)現(xiàn)方式詳解

    這篇文章主要介紹了Java單例模式的6種實(shí)現(xiàn)方式的相關(guān)資料,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • spring boot 與kafka集成的示例代碼

    spring boot 與kafka集成的示例代碼

    這篇文章主要介紹了spring boot 與kafka集成的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Java中的自旋鎖與阻塞鎖詳解

    Java中的自旋鎖與阻塞鎖詳解

    這篇文章主要介紹了Java中的自旋鎖與阻塞鎖詳解,阻塞鎖是指當(dāng)線程嘗試獲取鎖失敗時,線程進(jìn)入阻塞狀態(tài),直到接收信號后被喚醒,阻塞或者喚醒一個Java線程需要操作系統(tǒng)切換CPU?狀態(tài)來完成,這種狀態(tài)轉(zhuǎn)換?需要耗費(fèi)處理器時間,需要的朋友可以參考下
    2023-10-10

最新評論