SpringBoot 過濾器總結
阿新 • • 發佈:2020-08-26
一、建立過濾器的方式
(1) 對過濾器使用@Component註解或者在配置類中使用@Bean註解,但這種方式有個弊端就是攔截所有請求
(2)使用@WebFilter註解可以指定攔截url,但此方式也存在弊端多個過濾器無法指定優先順序
(3)使用FilterRegistrationBean方式建立過濾器可以指定過濾器優先順序
二、三種方式的實現
(1)、基於@Component 或者@Bean實現
@Component public class TestFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throwsServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("過濾器111"); } @Override public void destroy() { } }
配置類中@Configuration
@Bean("myFilter1")
public Filter estFilter() {
return new TestFilter();
}
(2)、基於WebFilter(注意啟動類要加@ServletComponentScan註解)
@WebFilter(filterName = "test1", urlPatterns = { "/page/*" }) public class TestFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throwsServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("過濾器111"); } @Override public void destroy() { } }
(3)基於FilterRegistrationBean
@Bean public FilterRegistrationBean uploadFilterRegistration1() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new DelegatingFilterProxy(new TestFilter())); registration.addUrlPatterns("/*"); registration.setName("MyFilter1"); registration.setOrder(5);//優先順序數字越大優先順序越小 return registration; }