尋找寫代碼感覺(八)之SpringBoot過濾器的使用

一、什麼是過濾器?

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

過濾器依賴servlet容器。在實現上基於函數回調,可以對幾乎所有請求進行過濾。

二、過濾器的使用

下面簡單的說說Spring Boot裏面如何增加過濾器。

過濾器使用實例

具體示例代碼如下:

 package com.rongrong.wiki.filter;

 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;

 import javax.servlet.*;
 import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;

 @Component
 public class LogFilter implements Filter {

     private static final Logger LOG = LoggerFactory.getLogger(LogFilter.class);

     @Override
     public void init(FilterConfig filterConfig) throws ServletException {

     }

     @Override
     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
         // 打印請求信息
         HttpServletRequest request = (HttpServletRequest) servletRequest;
         LOG.info("------------- LogFilter 開始 -------------");
         LOG.info("請求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
         LOG.info("遠程地址: {}", request.getRemoteAddr());

         long startTime = System.currentTimeMillis();
         filterChain.doFilter(servletRequest, servletResponse);
         LOG.info("------------- LogFilter 結束 耗時:{} ms -------------", System.currentTimeMillis() - startTime);
     }

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

過濾器裏面的三個方法

  • init : filter對象只會創建一次,init方法也只會執行一次。
  • doFilter : 主要的業務代碼編寫方法,可以多次重複調用
  • destroy : 在銷燬Filter時自動調用(程序關閉或者主動銷燬Filter)。

三、測試結果

重新啓動服務,刷新頁面,查看結果如下圖:

到此,SpringBoot過濾器的使用介紹完,有興趣的同學自行嘗試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章