一、過濾器簡介
1、過濾器是什么?
Filter也稱之為過濾器,過濾器是對資料進行過濾,預處理,開發人員可以對客戶端提交的資料進行過濾處理,比如敏感詞,也可以對服務端回傳的資料進行處理,還有就是可以驗證用戶的登錄情況,權限驗證,對靜態資源進行訪問控制,沒有登錄或者是沒有權限時是不能讓用戶直接訪問這些資源的,類似的過濾器還有很多的功能,比如說編碼,壓縮服務端給客戶端回傳的各種資料,等等,
2、過濾器的運作原理?
java為我們提供了一個Filter介面,我們只需要實作這個介面就能實作自定義過濾器,然后添加一些必要的配置讓過濾器生效,過濾器只能初始化一次,并且過濾器只會在專案停止或者是重新部署的時候才銷毀,我們可以實作的這個Filter介面,里面最重要的是一個doFilter方法,當我們撰寫好Filter,并配置好對那個URL資源進行攔截時,每一次請求這個資源之前就會呼叫這個doFilter方法,并且在這個doFilter方法里面也有著一個FilterChain的物件引數 ,這個物件里面也有一個doFilter方法,是否呼叫這個方法決定了這個過濾器是否能呼叫后面的資源或者是執行后面的過濾器,也就是相當于目標資源,所以在過濾器里面可以進行一些什么操作呢?可以在呼叫目標資源之前,進行權限等的處理;判斷是否呼叫目標資源;也可以在呼叫目標資源之后進行一些回應訊息進行處理,
二、過濾器配置的兩種方法
1、注解配置
首先我們定義一個MyFilter 實作Filter介面,重寫里面的三個方法:
@Order(1)
@WebFilter(filterName = "myFilter1",urlPatterns = {"/*"})
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化過濾器");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("進入目標資源之前先干點啥");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("處理一下服務端回傳的response");
}
@Override
public void destroy() {
System.out.println("過濾器被銷毀了");
}
代碼說明:
- @WebFilter注解,filterName屬性表示filter的名稱,urlPatter表示要攔截的URL資源,可以是一個或者多個,
- @Order(1)表示如果有多個攔截器的話就是設定這個攔截器的運行等級,數字越小,越先執行
- init()方法只會執行一次,初始化過濾器,
- doFilter()核心方法,配置過濾器的邏輯代碼,
- destroy()只會在專案停止或者是專案重新部署的時候才會執行,
配置完上面的之后我們還需要在啟動類加上一個掃描包的注解,開啟包掃描,@ServletComponentScan(“com.example.demofilter.filter”),當然你也可以不用寫包的具體地址,不傳引數,但是建議是傳引數,并且這個采引數也可以傳多個的,
以上就完成了一個Filter的基本配置,運行專案即可看到效果,還有一種非注解形式的配置方式,
2、java配置
我們可以通過自己定義一個java組態檔,將自定義的Filter 注冊到到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;
}
}
這個配置和上面的注解配置類似,上面注解實作的原理也是這樣的,雖然是兩種不同的方法,但是是一樣的原理,
3、測驗撰寫與結果
controller代碼撰寫
@RestController
@RequestMapping("/Filter")
public class FilterController {
@RequestMapping("/testFilter")
public String testFilter(){
System.out.println("filter執行成功");
return "filter";
}
}
完成之后啟動專案,訪問介面:localhost:8098/Filter/testFilter,觀察控制臺運行結果,

根據之前我們說的,過濾器只會執行一次,然后過濾器也只會在專案停止或者是重新部署的時候才會銷毀,所以我們是看不到銷毀的代碼輸出出來的,
4、總結
本文先講解了過濾器的一些概念,用途,然后詳細講解了過濾器的在SpringBoot中的配置與使用,我們介紹了兩種配置方法,分別是注解方式與java 代碼的配置,之后進行測驗,與結果展示,
結語:
SpringBoot是現在用的很廣泛的框架,基本上學Java、軟體開發的都會學到,作業中也都會用到,但是技術是需要不斷提升的,不只是要會用,還要懂,我這有免費的各種框架學習資料,還有教程,只要是作業中會要用到的點,都有,有需要的小伙伴可以點擊進入,暗號:csdd,免費提供!


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/174941.html
標籤:其他
上一篇:2006-京淘Day12
