1. 程式人生 > 其它 >尋找寫程式碼感覺(八)之SpringBoot過濾器的使用

尋找寫程式碼感覺(八)之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過濾器的使用介紹完,有興趣的同學自行嘗試。

優秀不夠,你是否無可替代

軟體測試交流QQ群:721256703,期待你的加入!!

歡迎關注我的微信公眾號:軟體測試君