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

SptingBoot過(guò)濾器Filter的使用詳解

 更新時(shí)間:2023年09月25日 10:08:42   作者:騎個(gè)小蝸牛  
這篇文章主要介紹了SptingBoot過(guò)濾器Filter的使用詳解,Filter屬于Servlet規(guī)范,并不是Spring獨(dú)有的,Filter主要用于攔截請(qǐng)求,做一些業(yè)務(wù)邏輯操作,然后可以決定請(qǐng)求是否可以繼續(xù)往下分發(fā),落到其他的Filter或者對(duì)應(yīng)的Servlet,需要的朋友可以參考下

Filter

Filter屬于Servlet規(guī)范,并不是Spring獨(dú)有的。Filter主要用于攔截請(qǐng)求,做一些業(yè)務(wù)邏輯操作,然后可以決定請(qǐng)求是否可以繼續(xù)往下分發(fā),落到其他的Filter或者對(duì)應(yīng)的Servlet。

Filter的工作流程

  1. 進(jìn)入filter,執(zhí)行相關(guān)業(yè)務(wù)邏輯
  2. 若判定失敗,直接返回,不需要將請(qǐng)求發(fā)給Servlet
  3. 若判定通行,進(jìn)行入下一個(gè)filter
  4. 如果全部filter通行,進(jìn)入Servlet邏輯,Servlet執(zhí)行完畢之后,又返回Filter,最后在返回給請(qǐng)求方

自定義Filter的使用方式

Spring中過(guò)濾器Filter不同使用方式都是通過(guò):FilterRegistrationBean包裝filter,最終注冊(cè)到Servlet容器中。

1. @WebFilter+@ServletComponentScan

在SpringBootApplication上添加@ServletComponentScan注解,在Filter上添加@WebFilter注解。

該方式的缺點(diǎn):無(wú)法設(shè)置過(guò)濾器之間的優(yōu)先級(jí)。

@WebFilter+@ServletComponentScan方式無(wú)法通過(guò)@Order注解指定過(guò)濾器優(yōu)先級(jí):優(yōu)先級(jí)使用默認(rèn)值Ordered.LOWEST_PRECEDENCE(2147483647),相同優(yōu)先級(jí)的情況下,根據(jù)名字先后順序來(lái)決定。

使用方法

1. 在SpringBootApplication上使用@ServletComponentScan注解

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

2.在Filter上使用@WebFilter注解

@WebFilter(urlPatterns = {"/test3"})
public class MyFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        System.out.println("======= MyFilter =======");
        filterChain.doFilter(request,response);
    }
}

@WebFilter

@WebFilter用于將一個(gè)類聲明為過(guò)濾器。

WebFilter注解的主要屬性:

屬性名類型描述
filterNameString指定過(guò)濾器的name屬性,(springbean也是用該名稱),等價(jià)于< filter-name>
urlPatternsString[]指定一組過(guò)濾器的URL匹配模式。等價(jià)于< url-pattern>
valueString[]該屬性等價(jià)于urlPatterns屬性,但是兩個(gè)不應(yīng)該同時(shí)使用
sevletNamesString[]指定過(guò)濾器將用于哪些servlet。取值是@WebServlet中的name屬性的取值,或者是web.xml中< servlet-name>
dispatcherTypesDispatcherType[]指定一組過(guò)濾器的轉(zhuǎn)發(fā)模式。具體取值包括:ASYNC、ERROR、FORWARD、INCLUDE、REQUEST,默認(rèn)REQUEST
initParamsWebInitParam[]指定一組過(guò)濾器初始化參數(shù),等價(jià)于< init-param>
asyncSupportedboolean聲明過(guò)濾器是否支持異步操作模式,等價(jià)于< async-supported>標(biāo)簽
descriptionString過(guò)濾器的描述信息,等價(jià)于< description>
displayNameString過(guò)濾器的顯示名,通常配合工具使用,等價(jià)于< display-name>

在SpringBoot項(xiàng)目中,@WebServlet、@WebFilter、@WebListener這三個(gè)注解默認(rèn)是不會(huì)被掃描的,一般在SpringBootApplication上添加@ServletComponentScan注解,表示對(duì)這三個(gè)注解的掃描。

@ServletComponentScan可以實(shí)現(xiàn)將Servlet(控制器)、Filter(過(guò)濾器)、Listener(監(jiān)聽器)自動(dòng)注冊(cè)到Spring容器中,無(wú)需其他代碼。

  • Servlet:通過(guò)@WebServlet注解定義
  • Filter:通過(guò)@WebFilter注解定義
  • Listener:通過(guò)@WebListener注解定義

常見問(wèn)題分析

1. 只使用@WebFilte:過(guò)濾器不生效

WebFilter屬于注解屬于Servlet3+,與Spring本身沒(méi)有什么關(guān)系,所以Spring默認(rèn)是不認(rèn)識(shí)這個(gè)注解的。

2. @WebFilter+@Component:配置的過(guò)濾條件不生效 同上,Spring是不認(rèn)識(shí)@WebFilter注解的,所以注解配置的任何屬性都無(wú)意義(例如:指定過(guò)濾的url)。 該種方式其實(shí)就等同于只加了個(gè)@Component注解,此時(shí)過(guò)濾器能生效,但無(wú)過(guò)濾條件,會(huì)過(guò)濾所有url。

3. @WebFilter+@Component+@ServletComponentScan:過(guò)濾器會(huì)被調(diào)用兩次

  • 一次:@WebFilter+@ServletComponentScan,被SpringBean管理,過(guò)濾器生效,根據(jù)@WebFilter配置的屬性過(guò)濾
  • 二次:@Component,又被SpringBean管理一次,過(guò)濾器生效(和上面不是同一個(gè)bean),過(guò)濾全部url

4. @WebFilter+@Order+@ServletComponentScan:設(shè)置過(guò)濾器優(yōu)先級(jí)無(wú)效

通過(guò)@WebFilter+@ServletComponentScan方式注冊(cè)的,其生成的FilterRegistrationBean并沒(méi)有檢查@Order注解,所以@Order注解不生效。

2. @Component+@Order

通過(guò)在Filter上加@Component和@Order注解,即可被Spring管理,并可指定過(guò)濾器的執(zhí)行順序。

該方式的缺點(diǎn):只能過(guò)濾所有URL,不能通過(guò)配置去過(guò)濾指定的 URL。

使用方法

@Order(100)
@Component
public class MyFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        System.out.println("======= MyFilter =======");
        filterChain.doFilter(request,response);
    }
}

3. FilterRegistrationBean(推薦)

直接通過(guò)配置類定義Filter的FilterRegistrationBean,交給SpringBean容器管理。

該方式既能通過(guò)配置去過(guò)濾指定的 URL,也能指定過(guò)濾器之間的優(yōu)先級(jí)。

使用方法

public class MyFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        System.out.println("======= MyFilter =======");
        filterChain.doFilter(request,response);
    }
}
@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean<MyFilter> filterRegistrationBean() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(myFilter());
        registration.setName("myFilter");
        registration.addUrlPatterns("/test3");
        registration.setOrder(100);
        return registration;
    }
    @Bean
    public MyFilter myFilter() {
        return new MyFilter();
    }
}

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

相關(guān)文章

  • IDEA自動(dòng)生成類圖和時(shí)序圖的操作指南

    IDEA自動(dòng)生成類圖和時(shí)序圖的操作指南

    idea 的強(qiáng)大之處在于此,它包含了很多小插件,我們不需要再次下載相關(guān)插件,只需要在idea中小小的設(shè)置一下就可以了,本文我介紹了IDEA自動(dòng)生成類圖和時(shí)序圖的操作指南,我用的是idea2020版本,需要的朋友可以參考下
    2024-05-05
  • Spring?Boot?項(xiàng)目與JDK、Mybatis版本兼容對(duì)應(yīng)關(guān)系表及問(wèn)題記錄

    Spring?Boot?項(xiàng)目與JDK、Mybatis版本兼容對(duì)應(yīng)關(guān)系表及問(wèn)題記錄

    本文總結(jié)SpringBoot與JDK、MyBatis、SpringCloud及SpringCloudAlibaba的版本兼容性,提供對(duì)應(yīng)關(guān)系表和注意事項(xiàng),建議使用SpringBoot的依賴管理,匹配官方推薦版本,避免沖突,確保穩(wěn)定性,感興趣的朋友跟隨小編一起看看吧
    2025-07-07
  • Java多線程中斷機(jī)制三種方法及示例

    Java多線程中斷機(jī)制三種方法及示例

    這篇文章主要介紹了Java多線程中斷機(jī)制三種方法及示例,向大家分享了這三種方法的介紹幾代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java Web過(guò)濾器的核心原理、實(shí)現(xiàn)與執(zhí)行順序配置方法(最新整理)

    Java Web過(guò)濾器的核心原理、實(shí)現(xiàn)與執(zhí)行順序配置方法(最新整理)

    本文介紹了JavaWeb過(guò)濾器的核心概念、實(shí)現(xiàn)方式及執(zhí)行順序,過(guò)濾器允許在請(qǐng)求到達(dá)Servlet之前或響應(yīng)返回客戶端之前對(duì)請(qǐng)求和響應(yīng)進(jìn)行處理,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • 話說(shuō)Spring Security權(quán)限管理(源碼詳解)

    話說(shuō)Spring Security權(quán)限管理(源碼詳解)

    本篇文章主要介紹了話說(shuō)Spring Security權(quán)限管理(源碼詳解) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • SpringBoot集成WebSokcet代碼步驟

    SpringBoot集成WebSokcet代碼步驟

    Spring?Boot是一個(gè)流行的Java框架,用于快速構(gòu)建Spring應(yīng)用程序,WebSocket是一種實(shí)現(xiàn)實(shí)時(shí)通信的協(xié)議,與HTTP協(xié)議結(jié)合使用,可以提供全雙工通信,這篇文章主要介紹了SpringBoot集成WebSokcet代碼步驟
    2026-01-01
  • java對(duì)于JSON的解析方法舉例詳解

    java對(duì)于JSON的解析方法舉例詳解

    在編寫應(yīng)用時(shí),我們經(jīng)常要解析JSON,下面這篇文章主要給大家介紹了關(guān)于java對(duì)于JSON的解析方法,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • 8張圖帶你全面了解Java?kafka的核心機(jī)制

    8張圖帶你全面了解Java?kafka的核心機(jī)制

    kafka是目前企業(yè)中很常用的消息隊(duì)列產(chǎn)品,可以用于削峰、解耦、異步通信,本文就通過(guò)幾張圖帶大家全面認(rèn)識(shí)一下kafka,現(xiàn)在我們不妨帶入kafka設(shè)計(jì)者的角度去思考該如何設(shè)計(jì),它的架構(gòu)是怎么樣的、都有哪些組件組成、如何進(jìn)行擴(kuò)展等等,需要的朋友可以參考下
    2023-05-05
  • 反對(duì)使用Spring封裝的多線程類原因

    反對(duì)使用Spring封裝的多線程類原因

    這篇文章主要介紹了反對(duì)使用Spring封裝的多線程類原因,文章圍繞主題展開詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • Spring?Boot小型項(xiàng)目如何使用異步任務(wù)管理器實(shí)現(xiàn)不同業(yè)務(wù)間的解耦

    Spring?Boot小型項(xiàng)目如何使用異步任務(wù)管理器實(shí)現(xiàn)不同業(yè)務(wù)間的解耦

    這篇文章主要介紹了Spring?Boot小型項(xiàng)目如何使用異步任務(wù)管理器實(shí)現(xiàn)不同業(yè)務(wù)間的解耦,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08

最新評(píng)論

鹤壁市| 化隆| 东阿县| 鄂温| 潢川县| 九龙城区| 资溪县| 桃园市| 额济纳旗| 怀远县| 辛集市| 榆林市| 杭锦旗| 海原县| 湘潭县| 亳州市| 伊吾县| 江油市| 泰顺县| 深水埗区| 阿拉尔市| 贵定县| 延津县| 历史| 景谷| 乐陵市| 平山县| 资兴市| 融水| 洪湖市| 西城区| 化州市| 深水埗区| 武夷山市| 安平县| 宁阳县| 富源县| 泰顺县| 临沧市| 南陵县| 濮阳市|