有天上飛的概念,就要有落地的實現
概念十遍不如程式碼一遍,朋友,希望你把文中所有的程式碼案例都敲一遍
先贊後看,養成習慣
SpringBoot 圖文系列教程技術大綱
SpringBoot 圖文教程系列文章目錄
- SpringBoot圖文教程1「概念+案例 思維導圖」「基礎篇上」
- SpringBoot圖文教程2—日誌的使用「logback」「log4j」
- SpringBoot圖文教程3—「‘初戀’情結」整合Jsp
- SpringBoot圖文教程4—SpringBoot 實現檔案上傳下載
- SpringBoot圖文教程5—SpringBoot 中使用Aop
前言
過濾器是Javaweb非常基礎的一個概念,屬於Servlet的一部分。本文將會使用SpringBoot配置過濾器。在程式碼實現之前先通過一個簡單的小案例解釋一下什麼是過濾器。
過濾器filter的概念:Servlet中提供的技術,可以過濾瀏覽器發出的請求,並且決定放行請求還是中斷請求。
- 瀏覽器對伺服器的請求,會先經過過濾器,再到達伺服器
- 伺服器對瀏覽器的響應,也會先經過過濾器,最後再響應給瀏覽器
- 基於過濾器的機制,我們可以在過濾器中對請求和響應做一些處理,可以在過濾器中決定是否放行,例如:校驗請求中有沒有敏感字串,校驗有沒有Session等。
舉個例子:
過濾器就像疫情期間村口的路卡,你不管進村兒還是出村兒都需要經過路卡
路卡的工作人員(過濾器)會在你經過的時候對你做一些”操作“,量量體溫,問詢一下,然後對你一些處理,放行或者讓你原路返回。
SpringBoot中過濾器的使用
本文所有的內容,將會在下面的demo上進行操作。 請去Git倉庫下載:gitee.com/bingqilinpe…
1.建立過濾器類
/**
* @WebFilter時Servlet3.0新增的註解,原先實現過濾器,需要在web.xml中進行配置,而現在通過此註解,啟動啟動時會自動掃描自動註冊。
*
* @WebFilter filterName 定義註冊的過濾器的名字
* urlPatterns 定義要攔截所有的請求
*
*/
@WebFilter(filterName="userFilter",urlPatterns={"/*"})
public class UserFilter implements Filter {
Logger logger = LoggerFactory.getLogger(UserFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
logger.info("過濾器初始化");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
logger.info("請求處理");
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
// 簡單的session校驗
if (request.getSession().getAttribute("user")!=null) {
// 請求放行
filterChain.doFilter(request, response);
}else {
}
}
@Override
public void destroy() {
logger.info("銷燬");
}
}
複製程式碼
2.SpringBoot配合過濾器掃描
@WebFilter時Servlet3.0新增的註解,原先實現過濾器,需要在web.xml中進行配置,而現在通過此註解,啟動啟動時會自動掃描自動註冊。
在SpringBoot中配置過濾器掃描只需要在啟動類加入@ServletComponentScan註解即可。
3.設定多個過濾器的執行順序
你一定聽過這樣的一個詞兒:過濾器鏈路,什麼是過濾器鏈路呢?就是有多個過濾器,就像有多個路卡是一樣一樣的。當你有多個過濾器之後,就需要規定各個過濾器的指定順序了。那麼怎麼指定過濾器的執行順序呢?
SpringMvc中通過web.xml可以設定
在SpringBoot中可以通過FilterRegistrationBean進行過濾器的註冊。
建立兩個Filter類 刪除@WebFilter註解即可
在啟動類中通過@Bean的方式配置FilterRegistrationBean
@SpringBootApplication
@ServletComponentScan
public class AppRun {
public static void main(String[] args) {
// 引數:啟動類類物件 主函式形參名
SpringApplication.run(AppRun.class,args);
}
@Bean
public FilterRegistrationBean filterRegistrationBean(UserFilter userFilter) {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(userFilter);
//過濾器名稱
registration.setName("userFilter");
//攔截路徑
registration.addUrlPatterns("/*");
//設定順序
registration.setOrder(10);
return registration;
}
@Bean
public FilterRegistrationBean filterRegistrationBean2(User2Filter user2Filter) {
FilterRegistrationBean registration = new FilterRegistrationBean();
// 設定過濾器
registration.setFilter(user2Filter);
//過濾器名稱
registration.setName("user2Filter");
//攔截路徑
registration.addUrlPatterns("/*");
//設定順序
registration.setOrder(20);
return registration;
}
@Bean
public UserFilter userFilter(){
return new UserFilter();
}
@Bean
public User2Filter user2Filter(){
return new User2Filter();
}
}
複製程式碼
註冊多個時,就註冊多個FilterRegistrationBean即可。啟動之後的效果如下:
總結
以上就是SpringBoot中過濾器的簡單使用,本文為基礎篇,所以關於過濾器的應用會在後續文章中寫出。
恭喜你完成了本章的學習,為你鼓掌!如果本文對你有幫助,請幫忙點贊,評論,轉發,這對作者很重要,謝謝。
讓我們再次回顧本文的學習目標
- 掌握SpringBoot中過濾器的使用
要掌握SpringBoot更多的用法,請持續關注本系列教程。
下面體貼的我給朋友萌還準備了一些 自測面試題和專案案例,希望你能夠成熱打鐵,將知識夯紮實。
上期自測面試題答案
見面試題集錦 gitee.com/bingqilinpe…
自測面試題(答案見下期)
無
上期自測實現專案小案例答案
見碼雲倉庫 gitee.com/bingqilinpe…
自測實現專案小案例(答案見下期)
本次需求:
練習文中demo
求關注,求點贊,求轉發
歡迎關注本人公眾號:鹿老師的Java筆記,將在長期更新Java技術圖文教程和視訊教程,Java學習經驗,Java面試經驗以及Java實戰開發經驗。