Filter,過濾器,顧名思義,便是對數據等的過濾,預處理過程。爲何要引入過濾器呢?在日常訪問網站的時候,有時候發一些敏感的信息,發出後顯示時 就會將敏感信息用*等字符替代,這就是用過濾器對信息進行了處理。這只是一個簡單的例子,固然,過濾器那麼強大,它的功能也不可能侷限於此,它不只能預處 理數據,只要是發送過來的請求它都是能夠預處理的,同時,它還能夠對服務器返回的響應進行預處理,這樣,大大減輕了服務器的壓力。例如,實現URL級別的 權限訪問控制、過濾敏感詞彙、壓縮響應信息等一些高級功能。web
過濾器是可插拔的,咱們不須要某個過濾器時,直接刪掉不會影響程序的運行。
一個過濾器不依賴於另外一個資源
維護少,容易維護api
過濾做用,對從客戶端向服務器端發送的請求進行過濾,也能夠對服務器端返回的響應進行處理。它使用戶能夠改變一個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 轉換等。