Filter在springboot中的使用方法詳解
Filter 過濾器
Filter何時進行url過濾
filter(過濾器)作用于在intreceptor(攔截器)之前,不像intreceptor一樣依賴于springmvc框架,只需要依賴于serverlet。
Filter在spring /springboot中如何使用
1.自定義Filter
比較原始的一種方法是定義一個MyFilter實現(xiàn)javax.servlet.Filter接口
public class MyFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 對request或 response 進行處理 // 調(diào)用filter鏈中的下一個filter filterChain.doFilter(servletRequest,servletResponse); } }
另一種方法的自定義Filter,繼承springframework.web.filter.OncePerRequestFilter,可以對同一個請求,只經(jīng)過一次過濾
public class MyFilter extends OncePerRequestFilter { /**此處不能@override doFilter方法 * 因為OncePerRequestFilter中 doFilter方法已經(jīng)是final * */ //自定義處理方法 public void interrupt(HttpServletResponse response, ErrorCode code){ //此處對response進行處理 } //重載OnecePerRequestFilter方法 @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain){ //調(diào)用自定義處理方法 interrupt(response,code); //對request 、response進行處理 } }
OncePerRequestFilter中的方法
修飾符和類型 | 方法和描述 |
void | doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) 此doFilter實現(xiàn)存儲“已過濾”的請求屬性,如果屬性已經(jīng)存在,則繼續(xù)進行而不再過濾。 |
protected abstract void | doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)和doFilter相同功能,但保證在單個請求線程中每個請求只調(diào)用一次。 |
protected java.lang.String | getAlreadyFilteredAttributeName() 返回標(biāo)識已過濾請求的請求屬性的名稱。 |
protected boolean | isAsyncDispatch(HttpServletRequest request) javax.servlet.DispatcherType.ASYNCServlet 3.0中引入的調(diào)度程序類型意味著可以在單個請求的過程中在多個線程中調(diào)用過濾器。 |
protected boolean | isAsyncStarted(HttpServletRequest request) 請求處理是否處于異步模式,這意味著在退出當(dāng)前線程后不會提交響應(yīng) |
protected boolean | shouldNotFilter(HttpServletRequest request) 可以在子類中重寫以進行自定義篩選控制,返回true以避免過濾給定的請求。 |
protected boolean | shouldNotFilterAsyncDispatch() javax.servlet.DispatcherType.ASYNCServlet 3.0中引入的調(diào)度程序類型意味著可以在單個請求的過程中在多個線程中調(diào)用過濾器。 |
protected boolean | shouldNotFilterErrorDispatch() 是否過濾錯誤調(diào)度,例如servlet容器處理和映射錯誤時web.xml |
2.注冊自定義Filter
在springboot中可以寫一個配置類,使用@Bean注入myFilterBean
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.boot.web.servlet.FilterRegistrationBean; @Configuration public class MyFilterConfig { @Bean public FilterRegistrationBean myFilterBean(MyFilter filter) { FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>(); filterRegistrationBean.setFilter(filter);//設(shè)置為自定義的過濾器MyFilter filterRegistrationBean.addUrlPatterns("/*");//攔截所有請求 filterRegistrationBean.setOrder(1);//優(yōu)先級為1 return filterRegistrationBean; } //可注冊多個自定義的過濾器 }
如果是使用xml配置則在web.xml配置如下( 注意配置多個filter時優(yōu)先級由filter的配置順序決定優(yōu)先級)
<filter> <filter-name>myFilter</filter-name> <filter-class>com.text.filter.myFilter</filter-class> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
到此這篇關(guān)于Filter在springboot中的使用方法詳解的文章就介紹到這了,更多相關(guān)Filter使用方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解讀springboot配置mybatis的sql執(zhí)行超時時間(mysql)
這篇文章主要介紹了解讀springboot配置mybatis的sql執(zhí)行超時時間(mysql),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01Java HelloWorld原理分析_動力節(jié)點Java學(xué)院整理
我們初學(xué)java的第一個程序是"hello world"。下面通過實例代碼給大家講解Java HelloWorld原理分析,感興趣的朋友一起學(xué)習(xí)吧2017-05-05Java concurrency之鎖_動力節(jié)點Java學(xué)院整理
這篇文章主要為大家詳細介紹了Java concurrency之鎖的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06Java單表實現(xiàn)評論回復(fù)功能(多種實現(xiàn)方式)
這篇文章主要介紹了Java單表實現(xiàn)評論回復(fù)功能,大家都知道評論功能有多種實現(xiàn)方式,本文逐一給大家詳細講解,需要的朋友可以參考下2023-03-03Spring實現(xiàn)控制反轉(zhuǎn)和依賴注入的示例詳解
這篇文章主要為大家詳細介紹IoC(控制反轉(zhuǎn))和DI(依賴注入)的概念,以及如何在Spring框架中實現(xiàn)它們,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-08-08