SpringBoot圖文教程6—SpringBoot中過濾器的使用

鹿小洋的Java筆記發表於2020-02-25

有天上飛的概念,就要有落地的實現

  • 概念十遍不如程式碼一遍,朋友,希望你把文中所有的程式碼案例都敲一遍

  • 先贊後看,養成習慣

SpringBoot 圖文系列教程技術大綱

鹿老師的Java筆記
鹿老師的Java筆記

SpringBoot 圖文教程系列文章目錄

  1. SpringBoot圖文教程1「概念+案例 思維導圖」「基礎篇上」
  2. SpringBoot圖文教程2—日誌的使用「logback」「log4j」
  3. SpringBoot圖文教程3—「‘初戀’情結」整合Jsp
  4. SpringBoot圖文教程4—SpringBoot 實現檔案上傳下載
  5. 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進行過濾器的註冊。

  1. 建立兩個Filter類 刪除@WebFilter註解即可


  2. 在啟動類中通過@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實戰開發經驗。

相關文章