1. 程式人生 > >spring mvc自定義過濾器filter實現對request預處理和response響應

spring mvc自定義過濾器filter實現對request預處理和response響應

      過濾器的作用攔截請求,提取公用的程式碼,在請求訪問action之前先處理一段程式碼,在action處理之後,在處理一段程式碼;基於這樣的作用,我們就可以在請求訪問action之前先處理一些整個專案共用的程式碼片段,比如,域名,,請求的url資訊,以及基於域名拓展的自定義資訊,比如使用者資料等等基礎資料,獲取到這些基礎資料之後,將這些資料儲存在請求的上下文,這樣在所有action請求就可以通用;

spring為我們提供很多基礎的過濾器介面,比如GenericFilterBean,Filter ,OncePerRequestFilter等等,這裡我使用了基於GenericFilterBean自定義自己的過濾器,實現抽象方法doFilter,在該方法中實現自己的業務程式碼即可 其他過濾器用法類似,可以參考其他的資料;程式碼如下:

      介面入參包括了request,response以及過濾器呼叫鏈chain;前面兩個引數大家比較常見,重點介紹過濾器鏈chain;

      正常一個web專案中會配置多個的filter,這些filter的執行順序是按照web.xml配置的順序執行,這些filter形成一個filter過濾器鏈,chain.doFilter負責將請求轉發給過濾器鏈下一個filter , 如果沒有filter那就是你請求的資源;重點就在這,如果你沒在每個filter的doFilter方法中呼叫chain.doFilter的方法,那麼,就會造成請求走到這個filter之後,接下去的filter以及請求的真正資源都不會執行到,也就是請求沒響應,或者404等問題;所以,切記,一定要呼叫chain.doFilter方法!!!!

      在doFiter方法中,我們就可以根據request提取一些公用引數資訊,然後將這些引數存到當前執行緒的上下文中,可以參考:ThreadLocal,一個很好的多執行緒傳參工具;

寫好過濾器之後,就要將該過濾器配置到專案的web.xml中,程式碼如下:

其中:filter-name指定過濾器名;

          filter-class:過濾器的類;

          filter-mapping:對映的配置;

          url-pattern:攔截的路徑;

       如果過濾器需要一些初始引數,則可以使用init-param配置引數值,在這裡,我的過濾器就有一個引數為name的引數,所以這裡我使用param-name指定引數名為name的引數,使用param-value設定引數值為contextFilter11111111;

       為了驗證過濾器執行的順序,我配置了兩個過濾器,順序為contextFilter->testFilter,接下來,看下執行結果如圖:

先執行contextFilter過濾器,在執行testFilter,也可以看到輸出引數name為我們配置的值:contextFilter111111111;說明配置沒問題;讀者可以驗證在web.xml調整兩個過濾器的位置,看下執行結果是不是先執行testFilter,再執行contextFilter;

相關推薦

spring mvc定義過濾器filter實現request處理response響應

      過濾器的作用攔截請求,提取公用的程式碼,在請求訪問action之前先處理一段程式碼,在action處理之後,在處理一段程式碼;基於這樣的作用,我們就可以在請求訪問action之前先處理一些整個專案共用的程式碼片段,比如,域名,,請求的url資訊,以及基於域名拓展的

spring mvc定義過濾器filter實現請求引數編解碼的程式碼

百度,google了半天即使再萬能的stackoverflow上也沒有得到解答,今天偶然間發現springmvc註解@RequestParam不是通過HttpServletRequest.java的getParameter(String name)方法得到的引數值,而

springboot2.0中Spring MVC的JSR具體體現Hibernate Validator,Spring Boot定義過濾器Filter

宣告,基於springboot 上一篇博文 ,地址: https://blog.csdn.net/weixin_42323802/article/details/83964225 在spring中,輸入驗證提供2種方式,一種基於spring框架,一種基於Hibernate Valid

Spring MVC攔截器+logback日誌+定義註解】實現使用者鑑權登陸訪問日誌記錄

摘要說明: 專案中經常這樣的需要  1. 登陸鑑權:比如使用者瀏覽器發出某個請求的時候我們需要判斷這個使用者是否已經登陸,也就是cookie中是否有他的登陸資訊。 2. 訪問日誌記錄:使用者訪問請求的時候我們有必要記錄訪問者的身份資訊以及訪問了哪個url,請求引數是什麼,這

Spring MVC 定義類型轉換器

import rtm ring type class ota 轉換 spa 新建 新建一個自定義轉換器 import org.springframework.core.convert.converter.Converter; import org.springfra

使用Spring AOP定義註解方式實現使用者操作日誌記錄

1,開發環境 作業系統:Windows 7 JDK:1.8.0_161 Eclipse:Mars.2 Release (4.5.2) 2,自定義註解類UserLog @Target({ElementType.PARAMETER, ElementType.METHOD}) @R

SpringBoot定義過濾器filter

主要有兩種方式: 一、第一種 步驟:(1)先建立自定義filter   DefaultFilter 為本人建立的自定義過濾器。 public class DefaultFilter implements Filter{ private Logger logger

spring mvc定義型別轉換器

參考spring boot 配置全域性日期型別轉換器 1 定義轉換器 @Component public class DateConvert implements Converter<String,Date> { @Override public Dat

Spring MVC 定義註解

1. 編寫註解 @Target({ElementType.METHOD}) @Retention(RUNTIME) public @interface Demo { String val

Spring Boot定義註解+AOP實現日誌記錄

訪問Controller列印的日誌效果如下:*********************************Request請求*************************************** ClassName : com.xxx.app.xxx.a

Spring MVC 定義 日期封裝方法

在SpringMVC中解析頁面提交的請求引數時,日期預設的格式是yyyy/MM/dd,並不符合中國人平常的使用習慣,此時可以配置介面卡自己來指定格式 //日期格式轉換,預設只支援yyyy/MM/dd格式,要轉變為yyyy-MM-dd protected void initBind

Spring mvc 定義時間轉換器

spring-mvc.xml配置檔案: <!-- 自定義轉換器 --> <bean id="conversionService" class="org.springfr

分析Spring MVC定義訊息轉換器

分析 在Spring MVC的請求處理階段大致可以分為以下幾個步驟:根據請求url找到對應的Controller的Method,引數繫結後通過反射執行方法,將執行結果交給檢視解析器響應檢視。 而在這之前需要通過訊息轉化器。Spring Boot底層通過HttpMessag

MVC定義路由,實現二級域名類導致的找到多個與名為xxx的控制器匹配的型別的錯誤

今日在網站錯誤日誌中發現手機站頁面訪問:http://m.jinrimianshi.com/company/395961 時出現找到多個與名為“company”的控制器匹配的型別。如果為此請求(“{controller}/{action}/{id}”)提供服務的路由沒有指

Spring MVC 定義資料繫結 報http 406錯誤

前臺時間(如2013-08-12 18:10:23)傳到後臺srpingMVC 進行繫結到javaBean的util.date 時會報資料繫結失敗,不能從String 轉換到Date 型別。 現在我寫了一個自定議資料繫結類 package com.ltkj.zhepg.

MVC-定義過濾器

APS.NET MVC中的每一個請求,都會分配給相應的控制器和對應的行為方法去處理,而在這些處理的前前後後如果想再加一些額外的邏輯處理。這時候就用到了過濾器。 自定義過濾器: 若要自定義一個過濾器,則要繼承ActionFilterAttribute類,這個類是一個抽象類,實

Hibernate3.1.3使用定義實體類實現SQL查詢語句的對映

Hibernate3.1.3使用自定義實體類實現對映 前言: 在使用Hibernate操作資料庫時, 特別是進行查詢時,往往要使用儲存過程或一些不方便使用實體類對映的SQL語句。這時就要用到hibernate的自定義SQL語句對映類。下面來介紹一下該過程的實現。 1.下載Hibernate3.1.3(比較

Spring定義註解簡單實現

round 自定義 pre tail img value npoi cut ava 1、註解的示例為在方法入參上加後綴 代碼示例: @Component @Aspect public class HelloAspect { // 將此類的解析指向註解 @P

Spring MVC定義錯誤頁面

在web.xml中新增: <error-page> <location>/error</location> </error-page> 新增控制器: @Controller public class ErrorCont

課堂動手動腦驗證以及定義異常類實現異常處理——java異常類

異常(exception):發生在程式執行期間,表明出現了一個非法執行的情況。許多JDK中的方法在檢測到非法情況時,都會丟擲一個異常物件。例如:陣列越界和被0除。 程式碼驗證: package test; import javax.swing.*; class AboutException { p