SpringBoot入門到精通系列教程 – Filter/WebFilter
- 2020 年 12 月 30 日
- 筆記
- JAVA, springboot
1. Filter簡介
通過Filter技術,對各種資源:例如API, JSP,Servlet,靜態圖片文件或靜態HTML文件進行攔截,從而實現一些特殊功能。如實現token校驗,URL級別的許可權控制、過濾敏感辭彙、額外記錄日誌、壓縮響應資訊等一些高級功能。
‘
1.1. SpringBoot 中Filter的作用
- 在request被處理前,預處理,或者修改request。比如,所有的api都要做鑒權處理,通過後才會被業務邏輯處理,這部分邏輯就可以卸載Filter中。
- 修改一個response,比如附加一些額外的資訊再返回給Client。
- 可以定義多個Filter,並指定執行的順序。
1.2. @WebFilter
Servlet3+ 額外增加的WebFilter注釋, 方便處理Web應用中的場景。
2. 基於@WebFilter的實現
環境:
- Java 1.8.0_05
- Spring Boot: 2.4.1
- IDE: Intellj IDEA 2020.3
2.1. SpringbootApplication方法上加上啟動掃描
@ServletComponentScan
@SpringBootApplication
public class TodoApiApplication {
// ... ...
}
2.2. 新建Filter
@WebFilter(filterName = "AuthFilter", urlPatterns = {"/todo-api/v1/tasks/*", "/todo-api/v1/order/*"})
@Order(1)
public class AuthFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
// 預處理 Request
// "Request - "+ request.getMethod() + ":"+ request.getRequestURI()
// ... ...
// 最後,讓其他servlet或者Filter繼續處理
filterChain.doFilter(servletRequest,servletResponse);
}
}
2.3. 關於WebFilter
- Order(x) 裡面的x數值越小優先順序越高
- 根據需要,可以重載init,destroy方法
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("過濾器創建");
}
@Override
public void destroy() {
System.out.println("過濾器銷毀");
}
3. 總結
Filter (@WebFilter) 用於攔截Web請求,進行預處理,或者修改Response再返回給客戶端。
———- END ———-