Filter在springboot中的使用方法詳解
Filter 過濾器
Filter何時進行url過濾
filter(過濾器)作用于在intreceptor(攔截器)之前,不像intreceptor一樣依賴于springmvc框架,只需要依賴于serverlet。
Filter在spring /springboot中如何使用
1.自定義Filter
比較原始的一種方法是定義一個MyFilter實現javax.servlet.Filter接口
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 對request或 response 進行處理
// 調用filter鏈中的下一個filter
filterChain.doFilter(servletRequest,servletResponse);
}
}另一種方法的自定義Filter,繼承springframework.web.filter.OncePerRequestFilter,可以對同一個請求,只經過一次過濾
public class MyFilter extends OncePerRequestFilter {
/**此處不能@override doFilter方法
* 因為OncePerRequestFilter中 doFilter方法已經是final
*
*/
//自定義處理方法
public void interrupt(HttpServletResponse response, ErrorCode code){
//此處對response進行處理
}
//重載OnecePerRequestFilter方法
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain){
//調用自定義處理方法
interrupt(response,code);
//對request 、response進行處理
}
}OncePerRequestFilter中的方法
| 修飾符和類型 | 方法和描述 |
| void | doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) 此doFilter實現存儲“已過濾”的請求屬性,如果屬性已經存在,則繼續(xù)進行而不再過濾。 |
| protected abstract void | doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)和doFilter相同功能,但保證在單個請求線程中每個請求只調用一次。 |
| protected java.lang.String | getAlreadyFilteredAttributeName() 返回標識已過濾請求的請求屬性的名稱。 |
| protected boolean | isAsyncDispatch(HttpServletRequest request) javax.servlet.DispatcherType.ASYNCServlet 3.0中引入的調度程序類型意味著可以在單個請求的過程中在多個線程中調用過濾器。 |
| protected boolean | isAsyncStarted(HttpServletRequest request) 請求處理是否處于異步模式,這意味著在退出當前線程后不會提交響應 |
| protected boolean | shouldNotFilter(HttpServletRequest request) 可以在子類中重寫以進行自定義篩選控制,返回true以避免過濾給定的請求。 |
| protected boolean | shouldNotFilterAsyncDispatch() javax.servlet.DispatcherType.ASYNCServlet 3.0中引入的調度程序類型意味著可以在單個請求的過程中在多個線程中調用過濾器。 |
| protected boolean | shouldNotFilterErrorDispatch() 是否過濾錯誤調度,例如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);//設置為自定義的過濾器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>到此這篇關于Filter在springboot中的使用方法詳解的文章就介紹到這了,更多相關Filter使用方法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
IDEA2020.2.3 "reading maven projects"卡住的問題
這篇文章主要介紹了IDEA2020.2.3 "reading maven projects"卡住的問題及問題原因探究,通過多種方法給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-10-10
Java解決No enclosing instance of type PrintListFromTailToHead
這篇文章主要介紹了Java解決No enclosing instance of type PrintListFromTailToHead is accessible問題的兩種方案的相關資料,需要的朋友可以參考下2016-07-07
mapstruct的用法之qualifiedByName示例詳解
qualifiedByName的意思就是使用這個Mapper接口中的指定的默認方法去處理這個屬性的轉換,而不是簡單的get?set,今天通過本文給大家介紹下mapstruct的用法之qualifiedByName示例詳解,感興趣的朋友一起看看吧2022-04-04
基于mybatis-plus QueryWrapper 排序的坑
這篇文章主要介紹了mybatis-plus QueryWrapper 排序的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
java環(huán)境變量為什么要配置path和classpath詳細解答
為何配置path?為何配置classpath?當時初學java時只是關心如何做而不去關心這些問題,接下來介紹一下,感興趣的朋友可以參考下哦2013-01-01
SpringBoot?自定義starter?yaml提示失效問題及解決方法
在自定義starter后,必不可少會有properties配置參數需要指定,而在有時又不知道為什么出現這個問題,這篇文章主要介紹了SpringBoot?自定義starter?yaml提示失效問題,需要的朋友可以參考下2022-12-12

