欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Filter在springboot中的使用方法詳解

 更新時間:2023年08月12日 10:35:30   作者:bibiwannbe  
這篇文章主要介紹了Filter在springboot中的使用方法詳解,filter(過濾器)作用于在intreceptor(攔截器)之前,不像intreceptor一樣依賴于springmvc框架,只需要依賴于serverlet,需要的朋友可以參考下

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中的方法

修飾符和類型方法和描述
voiddoFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
此doFilter實現(xiàn)存儲“已過濾”的請求屬性,如果屬性已經(jīng)存在,則繼續(xù)進行而不再過濾。
protected abstract voiddoFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)和doFilter相同功能,但保證在單個請求線程中每個請求只調(diào)用一次。
protected java.lang.StringgetAlreadyFilteredAttributeName()
返回標(biāo)識已過濾請求的請求屬性的名稱。
protected booleanisAsyncDispatch(HttpServletRequest request)
javax.servlet.DispatcherType.ASYNCServlet 3.0中引入的調(diào)度程序類型意味著可以在單個請求的過程中在多個線程中調(diào)用過濾器。
protected booleanisAsyncStarted(HttpServletRequest request)
請求處理是否處于異步模式,這意味著在退出當(dāng)前線程后不會提交響應(yīng)
protected booleanshouldNotFilter(HttpServletRequest request)
可以在子類中重寫以進行自定義篩選控制,返回true以避免過濾給定的請求。
protected booleanshouldNotFilterAsyncDispatch()
javax.servlet.DispatcherType.ASYNCServlet 3.0中引入的調(diào)度程序類型意味著可以在單個請求的過程中在多個線程中調(diào)用過濾器。
protected booleanshouldNotFilterErrorDispatch()
是否過濾錯誤調(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)文章

最新評論