Servelet組件之一的filter過濾器

什麼是filter

Filter,過濾器,顧名思義,便是對數據等的過濾,預處理過程。爲何要引入過濾器呢?在日常訪問網站的時候,有時候發一些敏感的信息,發出後顯示時 就會將敏感信息用*等字符替代,這就是用過濾器對信息進行了處理。這只是一個簡單的例子,固然,過濾器那麼強大,它的功能也不可能侷限於此,它不只能預處 理數據,只要是發送過來的請求它都是能夠預處理的,同時,它還能夠對服務器返回的響應進行預處理,這樣,大大減輕了服務器的壓力。例如,實現URL級別的 權限訪問控制、過濾敏感詞彙、壓縮響應信息等一些高級功能。web

filter優勢

過濾器是可插拔的,咱們不須要某個過濾器時,直接刪掉不會影響程序的運行。
一個過濾器不依賴於另外一個資源
維護少,容易維護api

使用filter

過濾做用,對從客戶端向服務器端發送的請求進行過濾,也能夠對服務器端返回的響應進行處理。它使用戶能夠改變一個request和修改一個 response.。Filter 不是一個servlet,它不能產生一個response,可是它可以在一個request到達servlet以前預處理request,也能夠在 response離開servlet時處理response。換句話說,filter實際上是客戶端與servlet中間的一個傳遞者,而且它能夠對要傳遞 的東西進行修改。服務器

    // 用戶沒有登陸
    if (session.getAttribute("sessionUser") == null) {
        // 1.不須要登陸的請求不攔截
        String resource = uri.substring(uri.lastIndexOf("/") + 1);
        // System.out.println(uri.substring(uri.lastIndexOf("/") + 1));
        // 不須要登陸就能夠訪問的資源
        if ("login.jsp".equals(resource) || "login".equals(resource)) {
            chain.doFilter(request, response);
        } else if (uri.contains("/api/get") || uri.contains("/api/post")) {
            chain.doFilter(request, response);
        }
        // 不合法的請求 用戶沒有登陸 卻訪問了一個須要登陸之後才能夠訪問的系統資源 這時候重定向到登陸頁面 讓用戶登陸
        else {
            // 重定向到系統登陸頁面
            response.sendRedirect("login.jsp");
        }
    }
    // 用戶已經登陸了 繼續下面的請求
    else {
        chain.doFilter(request, response);
    }

ilter配置
經過配置web.xml文件:咱們須要配置filter和filter-mapping兩個選項session

myFilter com.gzx.filter.MyFilter myFilter ...app

Filter請求和響應jsp

Filter是能夠轉換請求或響應的標頭和內容 (或二者) 的對象。Filter與 web 組件的區別在於, Filter自己一般不會建立響應。相反, Filter提供了可 "附加" 到任何類型的 web 資源的功能。所以, Filter不該依賴於它充當其Filter的 web 資源。這樣, 它能夠由多種類型的 web 資源組成。post

Filter能夠執行的主要任務以下所示。網站

  • 查詢請求並採起相應的操做。加密

  • 阻止請求和響應對經過任何進一步。spa

  • 修改請求標頭和數據。您能夠經過提供請求的自定義版原本執行此操做。

  • 修改響應標頭和數據。您能夠經過提供響應的自定義版原本執行此操做。

  • 與外部資源交互。

Filter的應用包括身份驗證、日誌記錄、圖像轉換、數據壓縮、加密、令牌流、XML 轉換等。

相關文章
相關標籤/搜索