最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot Filter 過濾器的使用方式

 更新時間:2022年09月20日 09:28:22   作者:LP學(xué)長???????  
這篇文章主要介紹了Spring Boot Filter 過濾器的使用方式,文章通過圍繞主題展開詳細的內(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")

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

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

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

相關(guān)文章

  • Java中正則表達式的使用和詳解(下)

    Java中正則表達式的使用和詳解(下)

    這篇文章主要介紹了Java正則表達式的使用和詳解(下)的相關(guān)資料,包括常用正則表達式和正則表達式語法,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-04-04
  • Java中Agent的使用詳解

    Java中Agent的使用詳解

    Java Agent是一種特殊類型的軟件組件,它允許在Java虛擬機(JVM)運行時修改應(yīng)用程序的字節(jié)碼,下面我們就來一起深入了解一下Agent的具體使用吧
    2023-12-12
  • 詳解SpringBoot 使用Spring Initializr 快速構(gòu)建工程(官方推薦)

    詳解SpringBoot 使用Spring Initializr 快速構(gòu)建工程(官方推薦)

    本篇文章主要介紹了SpringBoot 使用Spring Initializr 快速構(gòu)建工程(官方推薦),非常具有實用價值,需要的朋友可以參考下
    2017-10-10
  • Spring擴展BeanFactoryPostProcessor使用技巧詳解

    Spring擴展BeanFactoryPostProcessor使用技巧詳解

    這篇文章主要為大家介紹了Spring擴展BeanFactoryPostProcessor使用技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Eclipse添加xml文件提示及Hibernate配置學(xué)習(xí)

    Eclipse添加xml文件提示及Hibernate配置學(xué)習(xí)

    文件提示功能在開發(fā)過程中很實用的,本文實現(xiàn)了一個Eclipse添加xml文件提示,感興趣的朋友可以了解下啊,希望本文對你有所幫助
    2013-01-01
  • 淺談Java中ThreadLocal內(nèi)存泄露的原因及處理方式

    淺談Java中ThreadLocal內(nèi)存泄露的原因及處理方式

    內(nèi)存泄漏就是我們申請了內(nèi)存,但是該內(nèi)存一直無法釋放,就會導(dǎo)致內(nèi)存溢出問題,本文詳細的介紹了ThreadLocal內(nèi)存泄露的原因及處理方式,感興趣的可以了解一下
    2023-05-05
  • Java中this,static,final,const用法詳解

    Java中this,static,final,const用法詳解

    這篇文章主要介紹了Java中this,static,final,const用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • SpringBoot整合Security權(quán)限控制登錄首頁

    SpringBoot整合Security權(quán)限控制登錄首頁

    這篇文章主要為大家介紹了SpringBoot整合Security權(quán)限控制登錄首頁示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Java開發(fā)之Lombok指南

    Java開發(fā)之Lombok指南

    Lombok是一款Java開發(fā)插件,使得Java開發(fā)者可以通過其定義的一些注解來消除業(yè)務(wù)工程中冗長和繁瑣的代碼,它能夠在編譯源代碼期間自動幫我們生成這些方法,并沒有如反射那樣降低程序的性能。下面我們來詳細了解一下吧
    2019-06-06
  • MyBatis實現(xiàn)動態(tài)SQL的實現(xiàn)方法

    MyBatis實現(xiàn)動態(tài)SQL的實現(xiàn)方法

    這篇文章主要介紹了MyBatis實現(xiàn)動態(tài)SQL的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評論

菏泽市| 乌兰浩特市| 呈贡县| 吉林市| 晋城| 斗六市| 周至县| 凤冈县| 灌南县| 葵青区| 隆回县| 丹东市| 云浮市| 鞍山市| 绿春县| 长葛市| 永靖县| 吉林市| 北流市| 阳城县| 微山县| 银川市| 滦平县| 崇阳县| 富宁县| 高碑店市| 沅陵县| 丹凤县| 社旗县| 桐梓县| 冀州市| 芜湖市| 仁寿县| 华池县| 乌什县| 五寨县| 额济纳旗| 年辖:市辖区| 沁源县| 阿荣旗| 同心县|