springboot 使用filter

先創建一個類繼承  javax.servlet.Filter  ,並重寫方法  doFilter

關於Filter 的使用,可以參考之前的文章https://blog.csdn.net/weixin_35675281/article/details/103746703

注入容器的方法:

1、通過【@Component】 聲明式注入到 IOC容器中,通過spring boot 的屬性【@Order】可以對filter進行排序

@Component
@Order(1)
public class FirstFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest servletRequest = (HttpServletRequest) request;
        System.out.println("FirstFilter  攔截的uri【" +servletRequest.getRequestURI()+  "】  doFilter start...");
        chain.doFilter(request,response);
        System.out.println("FirstFilter doFilter end...");
    }
}

2、通過Servlet3.0規範【@WebFilter】引入,通過【@ServletComponentScan】中的【basePackages】掃描包注入到IOC容器中,其中【@ServletComponentScan】是配置在config中,而@WebFilter是放在filter中,filter的部分代碼如下

@WebFilter(filterName = "secondFilter",urlPatterns ={ "/*"})
public class SecondFilter implements Filter {
         。。。。
}

官方文檔描述如下:

3、Spring mvc 的Config 配置bean的注入,推薦使用

@Bean
public FilterRegistrationBean FilterRegistrationBean(){
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
    filterRegistrationBean.setFilter(new FirstFilter());
    filterRegistrationBean.setName("firstFilter");
    filterRegistrationBean.setOrder(1);
    filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST,DispatcherType.FORWARD);
    return filterRegistrationBean;
}

三種功能對比如下:

  方法1 方法2 方法3
是否可以排序
是否可以自定義攔截規則
是否可以自定義類型
是否可以插拔使用

 

如果發現說錯,請留言指出,我測試出來的結果是這樣的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章