1.Filter簡介
Filter是過濾器的英文名稱,它是處于用戶端和伺服器資源檔案之間的一道過濾網。通過Filter可實作URL級别的權限通路控制、敏感詞彙過濾以及響應資訊壓縮等一些進階功能。
2.全局通路過濾器開發
複制一份“內建MyBatis”的項目代碼,修改項目名稱為filter。然後在項目目錄“/src/main/java/com/leichuangkj/filter”下建立filter目錄,并在filter目錄下建立RequestFilter類,具體代碼如下。
@WebFilter(filterName = "RequestFilter", urlPatterns = "/*")
public class RequestFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("---------->>> init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
System.out.println("---------->>> doFilter");
System.out.println("請求ip:" + servletRequest.getRemoteAddr());
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("---------->>> destory");
}
}
- @WebFilter:用于将一個類聲明為過濾器,該注解将會在應用部署時被容器處理,容器根據具體的屬性配置将相應的類部署為過濾器。這樣在Web應用中使用監聽器時,便不需要在web.xml中配置監聽器的描述資訊。
- filterName:指定過濾器的name,等價于XML配置檔案中的filter-name标簽。
- urlPatterns:指定過濾器的URL比對模式,等價于XML配置檔案中的url-pattern标簽。
3.啟動項目
在啟動類FilterApplication上添加注解@ServletComponentScan,然後啟動項目。
@MapperScan(basePackages = "com.leichuangkj.filter.dao.mapper")
@ServletComponentScan
@SpringBootApplication
public class FilterApplication {
public static void main(String[] args) {
SpringApplication.run(FilterApplication.class, args);
}
}
- @ServletComponentScan:使用該注解後,Servlet、Filter、Listener可直接通過@WebServlet、@WebFilter和@WebListener注解自動注冊。
4.測試
啟動項目,然後在postman中請求“http://localhost:8080/user/findByName”,可在IDEA控制台檢視到如下資訊。