SpringBoot 自定義過濾器

利用WebFilter註解實現

第一步:創建SpringBoot項目,添加依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

第二步:自定義Filter

  • MyFilter1
@WebFilter(filterName = "bb" , urlPatterns = {"/*"})
//@Order(10)//指定過濾器的執行順序,值越大越靠後執行
public class MyFilter1 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("MyFilter11 初始化");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("MyFilter11 請求處理之前");
        //將請求傳遞給下一個過濾器
        filterChain.doFilter(request, response);
        System.out.println("MyFilter11 請求處理之後");
    }
    @Override
    public void destroy() {
        System.out.println("MyFilter11 銷燬");
    }
}
  • MyFilter2
@WebFilter(filterName = "aa",urlPatterns = {"/*"})
//@Order(2)
public class MyFilter2 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("MyFilter12 初始化");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("MyFilter12 請求處理之前");
        //將請求傳遞給下一個過濾器
        filterChain.doFilter(request, response);
        System.out.println("MyFilter12 請求處理之後");
    }
    @Override
    public void destroy() {
        System.out.println("MyFilter12 銷燬");
    }
}

第三步:後臺Controller

@RestController
@ServletComponentScan
public class DemoController {
    @RequestMapping("/fun")
    public void fun(){
        System.out.println("fun");
    }
}

部署項目,請求Controller,結果:
在這裏插入圖片描述

使用代碼註冊的方式

第一步:創建SpringBoot項目,添加依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

第二步:自定義Filter

 MyFilter1

public class MyFilter1 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("MyFilter21 初始化");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("MyFilter21 請求處理之前");
        //將請求傳遞給下一個過濾器
        filterChain.doFilter(request, response);
        System.out.println("MyFilter21 請求處理之後");
    }
    @Override
    public void destroy() {
        System.out.println("MyFilter21 銷燬");
    }
}
  • MyFilter2
public class MyFilter2 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("MyFilter22 初始化");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("MyFilter22 請求處理之前");
        //將請求傳遞給下一個過濾器
        filterChain.doFilter(request, response);
        System.out.println("MyFilter22 請求處理之後");
    }
    @Override
    public void destroy() {
        System.out.println("MyFilter22 銷燬");
    }
}
  • 配置Filter
@Configuration
public class FilterRegistration {
    @Bean
    public FilterRegistrationBean filterRegistrationBean1(){
        FilterRegistrationBean<Filter> registration = 
					new FilterRegistrationBean<>();
        registration.setFilter(myFilter1());
        registration.setName("myFilter1");
        registration.addUrlPatterns("/*");
        registration.setOrder(9);
        return registration;
    }
    @Bean
    public Filter myFilter1(){
        return new MyFilter1();
    }
    @Bean
    public FilterRegistrationBean filterRegistrationBean2(){
        FilterRegistrationBean<Filter> registration = 
					new FilterRegistrationBean<>();
        registration.setFilter(myFilter2());
        registration.setName("myFilter2");
        registration.addUrlPatterns("/*");
        registration.setOrder(3);
        return registration;
    }
    @Bean
    public Filter myFilter2(){
        return new MyFilter2();
    }
}

第三步:後臺Controller

@RestController
@ServletComponentScan
public class DemoController {
    @RequestMapping("/fun")
    public void fun(){
        System.out.println("fun");
    }
}

部署項目,請求Controller,結果:
在這裏插入圖片描述

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