天天看點

16.內建過濾器Filter

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控制台檢視到如下資訊。

16.內建過濾器Filter