先創建一個類繼承 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 | |
是否可以排序 | 是 | 否 | 是 |
是否可以自定義攔截規則 | 否 | 是 | 是 |
是否可以自定義類型 | 是 | 是 | 是 |
是否可以插拔使用 | 否 | 是 | 是 |
如果發現說錯,請留言指出,我測試出來的結果是這樣的