spring boot過(guò)濾器FilterRegistrationBean實(shí)現(xiàn)方式
有2種方式可以實(shí)現(xiàn)過(guò)濾器
1:通過(guò)FilterRegistrationBean實(shí)例注冊(cè)
2:通過(guò)@WebFilter注解生效
這里選擇第一種,因?yàn)榈诙N不能設(shè)置過(guò)濾器之間的優(yōu)先級(jí)
為了演示優(yōu)先級(jí),這里創(chuàng)建2個(gè)測(cè)試過(guò)濾器類(lèi):Test1Filter、Test2Filter
通過(guò)實(shí)現(xiàn)javax.servlet.Filter接口,覆蓋其doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)方法,決定攔截或放行
public class Test1Filter implements Filter { @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest request=(HttpServletRequest)arg0; System.out.println("自定義過(guò)濾器filter1觸發(fā),攔截url:"+request.getRequestURI()); arg2.doFilter(arg0,arg1); } }
public class Test2Filter implements Filter { @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest request=(HttpServletRequest)arg0; System.out.println("自定義過(guò)濾器filter2觸發(fā),攔截url:"+request.getRequestURI()); arg2.doFilter(arg0,arg1); } }
通過(guò)在springboot的configuration中配置不同的FilterRegistrationBean實(shí)例,來(lái)注冊(cè)自定義過(guò)濾器
這里創(chuàng)建一個(gè)configuration類(lèi)
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.example.demo.filter.Test1Filter; import com.example.demo.filter.Test2Filter; @Configuration public class DemoConfiguration { @Bean public FilterRegistrationBean<Test1Filter> RegistTest1(){ //通過(guò)FilterRegistrationBean實(shí)例設(shè)置優(yōu)先級(jí)可以生效 //通過(guò)@WebFilter無(wú)效 FilterRegistrationBean<Test1Filter> bean = new FilterRegistrationBean<Test1Filter>(); bean.setFilter(new Test1Filter());//注冊(cè)自定義過(guò)濾器 bean.setName("flilter1");//過(guò)濾器名稱(chēng) bean.addUrlPatterns("/*");//過(guò)濾所有路徑 bean.setOrder(1);//優(yōu)先級(jí),最頂級(jí) return bean; } @Bean public FilterRegistrationBean<Test2Filter> RegistTest2(){ //通過(guò)FilterRegistrationBean實(shí)例設(shè)置優(yōu)先級(jí)可以生效 //通過(guò)@WebFilter無(wú)效 FilterRegistrationBean<Test2Filter> bean = new FilterRegistrationBean<Test2Filter>(); bean.setFilter(new Test2Filter());//注冊(cè)自定義過(guò)濾器 bean.setName("flilter2");//過(guò)濾器名稱(chēng) bean.addUrlPatterns("/test/*");//過(guò)濾所有路徑 bean.setOrder(6);//優(yōu)先級(jí),越低越優(yōu)先 return bean; } }
其中
1第一個(gè)bean攔截所有路徑,而第二個(gè)只攔截/test/*路徑
2第一個(gè)bean優(yōu)先級(jí)設(shè)置了1,而第二個(gè)設(shè)置了6,越低越優(yōu)先,所以過(guò)濾器1應(yīng)該在過(guò)濾器2前面攔截
運(yùn)行springboot,訪問(wèn)/test/*請(qǐng)求如下圖,再訪問(wèn)/v請(qǐng)求如下圖只攔截了過(guò)濾器1,而過(guò)濾器2路徑不匹配
如果把.addUrlPatterns();中攔截路徑改成一樣/test/*,則所有請(qǐng)求,都會(huì)觸發(fā)2個(gè)過(guò)濾器,而且過(guò)濾器1永遠(yuǎn)在最先攔截
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
修改idea的這些啟動(dòng)參數(shù),令你的idea健步如飛
這篇文章主要介紹了修改idea的這些啟動(dòng)參數(shù),令你的idea健步如飛~具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01Spring監(jiān)聽(tīng)器及定時(shí)任務(wù)實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Spring監(jiān)聽(tīng)器及定時(shí)任務(wù)實(shí)現(xiàn)方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07Java實(shí)現(xiàn)消消樂(lè)中的消除功能
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)消消樂(lè)中的消除功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07基于Java的guava開(kāi)源庫(kù)工具類(lèi)
guava是谷歌基于java封裝好的開(kāi)源庫(kù),這篇文章主要通過(guò)介紹幾個(gè)好用的guava工具類(lèi),感興趣的朋友可以參考下面文章內(nèi)容2021-09-09詳解Spring Cloud中Hystrix 線程隔離導(dǎo)致ThreadLocal數(shù)據(jù)丟失
這篇文章主要介紹了詳解Spring Cloud中Hystrix 線程隔離導(dǎo)致ThreadLocal數(shù)據(jù)丟失,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03SpringBoot 集成 Jasypt 對(duì)數(shù)據(jù)庫(kù)加密以及踩坑的記錄分享
這篇文章主要介紹了SpringBoot 集成 Jasypt 對(duì)數(shù)據(jù)庫(kù)加密以及踩坑,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Spring通過(guò)<import>標(biāo)簽導(dǎo)入外部配置文件
之前文章里我們講到Spring加載Xml配置文件的細(xì)節(jié),那么加載完了我們肯定要解析這個(gè)配置文件中定義的元素。這篇我們首先來(lái)分析下Spring是如何通過(guò)標(biāo)簽導(dǎo)入外部配置文件的。2021-06-06