springboot配置過(guò)濾器和多個(gè)攔截器、執(zhí)行順序(案例詳解)
過(guò)濾器配置的兩種方法
注解配置
@WebFilter+包掃描@ServletComponentScan(“com.jl.springboottest”),
首先我們定義一個(gè)MyFilter 實(shí)現(xiàn)Filter接口。重寫(xiě)里面的三個(gè)方法
@Order(1)
@WebFilter(filterName = "myFilter1",urlPatterns = {"/hello/*"})
public class DemoFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("come");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("out");
}
@Override
public void destroy() {
System.out.println("destroy");
}
}代碼說(shuō)明:
1.@WebFilter注解,filterName屬性表示filter的名稱(chēng),urlPatter表示要攔截的URL資源,可以是一個(gè)或者多個(gè)。用于將一個(gè)類(lèi)聲明為過(guò)濾器,該注解將會(huì)在部署時(shí)被容器處理,容器將根據(jù)具體的屬性配置將相應(yīng)的類(lèi)部署為過(guò)濾器。該注解具有下表給出的一些常用屬性 ( 以下所有屬性均為可選屬性,但是 value、urlPatterns、servletNames 三者必需至少包含一個(gè),且 value 和 urlPatterns 不能共存,如果同時(shí)指定,通常忽略 value 的取值 )
2.@Order(1)表示如果有多個(gè)攔截器的話就是設(shè)置這個(gè)攔截器的運(yùn)行等級(jí),數(shù)字越小,越先執(zhí)行
3.init()方法只會(huì)執(zhí)行一次,初始化過(guò)濾器。
4.doFilter()核心方法,配置過(guò)濾器的邏輯代碼。
5.destroy()只會(huì)在項(xiàng)目停止或者是項(xiàng)目重新部署的時(shí)候才會(huì)執(zhí)行。
配置完上面的之后我們還需要在啟動(dòng)類(lèi)加上一個(gè)掃描包的注解,開(kāi)啟包掃描。@ServletComponentScan(“com.example.demofilter.filter”),當(dāng)然你也可以不用寫(xiě)包的具體地址,不傳參數(shù),但是建議是傳參數(shù),并且這個(gè)采參數(shù)也可以傳多個(gè)的。
以上就完成了一個(gè)Filter的基本配置,運(yùn)行項(xiàng)目即可看到效果,還有一種非注解形式的配置方式。


java配置
我們可以通過(guò)自己定義一個(gè)java配置文件,將自定義的Filter 注冊(cè)到到FilterRegistrationBean里面。
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean registFilter(){
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new MyFilter());
registrationBean.addUrlPatterns("/*");
registrationBean.setName("Filter1");
registrationBean.setOrder(1);
return registrationBean;
}
}這個(gè)配置和上面的注解配置類(lèi)似。上面注解實(shí)現(xiàn)的原理也是這樣的,雖然是兩種不同的方法,但是是一樣的原理。


攔截器配置
創(chuàng)建兩個(gè)攔截器,重寫(xiě)方法


創(chuàng)建配置類(lèi),實(shí)現(xiàn)WebMvcConfigurer

order越小,越先執(zhí)行,否則按照register配置的順序執(zhí)行
執(zhí)行順序

參考文檔:
https://www.cnblogs.com/Timeouting-Study/p/16078773.html
https://blog.csdn.net/K_520_W/article/details/124529633
到此這篇關(guān)于springboot配置過(guò)濾器和多個(gè)攔截器、執(zhí)行順序的文章就介紹到這了,更多相關(guān)springboot過(guò)濾器和攔截器執(zhí)行順序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java設(shè)置session過(guò)期時(shí)間的實(shí)現(xiàn)方法
這篇文章主要介紹了java設(shè)置session過(guò)期時(shí)間的實(shí)現(xiàn)方法,以實(shí)例形式詳細(xì)講述了具體實(shí)現(xiàn)過(guò)程,非常具有參考借鑒價(jià)值,需要的朋友可以參考下2014-10-10
Springboot基于assembly的服務(wù)化打包方案及spring boot部署方式
這篇文章主要介紹了Springboot基于assembly的服務(wù)化打包方案及springboot項(xiàng)目的幾種常見(jiàn)的部署方式,本文主要針對(duì)第二種部署方式提供一種更加友好的打包方案,需要的朋友可以參考下2017-12-12
解決IDEA中 Ctrl+ALT+V這個(gè)快捷鍵無(wú)法使用的情況
這篇文章主要介紹了解決IDEA中 Ctrl+ALT+V這個(gè)快捷鍵無(wú)法使用的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
SpringBoot整合Shiro兩種方式(總結(jié))
這篇文章主要介紹了SpringBoot整合Shiro兩種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Springboot vue導(dǎo)出功能實(shí)現(xiàn)代碼
這篇文章主要介紹了Springboot vue導(dǎo)出功能實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Java實(shí)現(xiàn)貪吃蛇大作戰(zhàn)小游戲的示例代碼
本文主要介紹了Java實(shí)現(xiàn)貪吃蛇大作戰(zhàn)小游戲的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
詳解idea中web.xml默認(rèn)版本問(wèn)題解決
這篇文章主要介紹了詳解idea中web.xml默認(rèn)版本問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

