1. 程式人生 > 實用技巧 >SpringBoot 過濾器總結

SpringBoot 過濾器總結

一、建立過濾器的方式

  (1) 對過濾器使用@Component註解或者在配置類中使用@Bean註解,但這種方式有個弊端就是攔截所有請求

(2)使用@WebFilter註解可以指定攔截url,但此方式也存在弊端多個過濾器無法指定優先順序

(3)使用FilterRegistrationBean方式建立過濾器可以指定過濾器優先順序

二、三種方式的實現

  (1)、基於@Component 或者@Bean實現     

@Component
public class TestFilter implements Filter{

    @Override
    public void init(FilterConfig filterConfig) throws
ServletException { } @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) throws
ServletException { } @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;
    }