Spring Boot使用過濾器Filter

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


操作:

1.在pom.xml 中引入spring-boot-starter-web包:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

2、建立過濾器程序
@Order(1):表示過濾器的順序,假設我們有多個過濾器,你如何確定過濾器的執行順序?這個註解就是規定過濾器的順序。
@WebFilter:表示這個class是過濾器。
裏面的參數,filterName 爲過濾器名字,urlPatterns 爲過濾器的範圍,initParams 爲過濾器初始化參數。
過濾器裏面的三個方法
init : filter對象只會創建一次,init方法也只會執行一次。
doFilter : 主要的業務代碼編寫方法,可以多次重複調用
destroy : 在銷燬Filter時自動調用(程序關閉或者主動銷燬Filter)。

@Order(1)
@WebFilter(filterName = "piceaFilter", urlPatterns = "/*" , initParams = {
        @WebInitParam(name = "URL", value = "http://localhost:8080")})
public class PiceaFilter implements Filter {

    private String url;
    /**
     * 可以初始化Filter在web.xml裏面配置的初始化參數
     * filter對象只會創建一次,init方法也只會執行一次。
     * @param filterConfig
     * @throws ServletException
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.url = filterConfig.getInitParameter("URL");
        System.out.println("我是過濾器的初始化方法!URL=" + this.url +  ",生活開始.........");
    }

    /**
     * 主要的業務代碼編寫方法
     * @param servletRequest
     * @param servletResponse
     * @param filterChain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("我是過濾器的執行方法,客戶端向Servlet發送的請求被我攔截到了");
servletRequest.getRequestDispatcher("/failed").forward(servletRequest, servletResponse);
        //filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("我是過濾器的執行方法,Servlet向客戶端發送的響應被我攔截到了");
    }

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

 

 

 

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