1. 程式人生 > 程式設計 >Spring Boot使用過濾器Filter過程解析

Spring Boot使用過濾器Filter過程解析

這篇文章主要介紹了Spring Boot使用過濾器Filter過程解析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

首先我們說說什麼是過濾器,過濾器是對資料進行過濾,預處理過程,當我們訪問網站時,有時候會發布一些敏感資訊,發完以後有的會用*替代,還有就是登陸許可權控制等,一個資源,沒有經過授權,肯定是不能讓使用者隨便訪問的,這個時候,也可以用到過濾器。過濾器的功能還有很多,例如實現URL級別的許可權控制、壓縮響應資訊、編碼格式等等。

過濾器依賴servlet容器。在實現上基於函式回撥,可以對幾乎所有請求進行過濾。下面簡單的說說Spring Boot裡面如何增加過濾器。

1、引入spring-boot-starter-web

在pom.xml 中引入spring-boot-starter-web包。

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

2、建立過濾器程式

@Order(1):表示過濾器的順序,假設我們有多個過濾器,你如何確定過濾器的執行順序?這個註解就是規定過濾器的順序。

@WebFilter:表示這個class是過濾器。

裡面的引數,filterName 為過濾器名字,urlPatterns 為過濾器的範圍,initParams 為過濾器初始化引數。

過濾器裡面的三個方法

init : filter物件只會建立一次,init方法也只會執行一次。

doFilter : 主要的業務程式碼編寫方法,可以多次重複呼叫

destroy : 在銷燬Filter時自動呼叫(程式關閉或者主動銷燬Filter)。

@Order(1)
@WebFilter(filterName = "piceaFilter",urlPatterns = "/*",initParams = {
    @WebInitParam(name = "URL",value = "http://localhost:8080")})
public class PiceaFilter implements Filter {

  private String url;
  /**
   * 可以初始化Filter在web.xml裡面配置的初始化引數
   * filter物件只會建立一次,init方法也只會執行一次。
   * @param filterConfig
   * @throws ServletException
   */
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
    this.url = filterConfig.getInitParameter("URL");
    System.out.println("我是過濾器的初始化方法!URL=" + this.url + ",生活開始.........");
  }

  /**
   * 主要的業務程式碼編寫方法
   * @param servletRequest
   * @param servletResponse
   * @param filterChain
   * @throws IOException
   * @throws ServletException
   */
  @Override
  public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain) throws IOException,ServletException {
    System.out.println("我是過濾器的執行方法,客戶端向Servlet傳送的請求被我攔截到了");
    filterChain.doFilter(servletRequest,servletResponse);
    System.out.println("我是過濾器的執行方法,Servlet向客戶端傳送的響應被我攔截到了");
  }

  /**
   * 在銷燬Filter時自動呼叫。
   */
  @Override
  public void destroy() {
    System.out.println("我是過濾器的被銷燬時呼叫的方法!,活不下去了................" );
  }
}

3、建立Contoller類

這個類比較簡單,不做特別說明

@RestController
public class PiceaContoller {

  @RequestMapping("/query")
  public void asyncTask() throws Exception {
    System.out.println("我是控制類裡面的方法,我正在思考...............");
  }
}

4、啟動類中增加註解,自動註冊Filter

@ServletComponentScan :在SpringBootApplication上使用@ServletComponentScan註解後,Servlet、Filter、Listener可以直接通過@WebServlet、@WebFilter、@WebListener註解自動註冊,無需其他程式碼。

@SpringBootApplication
@ServletComponentScan
public class SpringBootFiFilterApplication {

  public static void main(String[] args) {
    SpringApplication.run(SpringBootFiFilterApplication.class,args);
  }

}

5、測試結果

好吧,又到了看療效的時候了。

在瀏覽中輸入:http://localhost:2001/query

這個時候控制檯的輸入為如下圖片。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。