SpringBoot —— Filter 过滤器

SpringBoot——实现过滤器Filter

1、Filter过滤器

(1) 主要用来过滤用户请求的,允许我们对用户的请求进行前置处理和后置处理。面向切面编程AOP。

例如:实现URL级别的权限控制、过滤非法请求等。

(2)Filter是依赖于Servlet容器(Filter接口在Servlet包下),增强版的servlet

(3)自定义Filter

方法一 : 1、实现javax.Servlet.Filter接口

              2、重写方法

                   init() 初始化

                   doFilter() 对请求进行过滤

                   destroy() 销毁过滤器后自行的操作,对资源进行回收

             3、创建配置类中注册自定义的过滤器

方法二:@WebFilter()注解,进行参数配置

               @ServletComponentScan

2、Filter接口如何实现拦截功能

(1)doFilter() 实现对用户请求的过滤

(2)流程:

       1、用户发送请求到web服务器,请求先到过滤器

       2、过滤器对请求进行一些处理(过滤请求参数、修改返回给客户端的response内容、判断是否让用户访问该接口等)

       3、用户请求完毕

3、定义多个过滤器,决定过滤器执行顺序

在配置类中调用FilterRegistrationBean.setOrder()方法进行决定。

filterRegistrationBean.setOrder(2); //2 表示在1 执行后再执行

filterRegistrationBean.setOrder(1); //1 表示先执行

@Configuration
public class MyFilterConfig {
   @Autowired
   MyFilter myFilter;
   @Autowired
   MyFilter2 myFilter2;
   
@Bean
public FilterRegistrationBean<MyFilter> setUpMyFilter() {
   FilterRegistrationBean<MyFilter> filterRegistrationBean = new FilterRegistrationBean<>();
   filterRegistrationBean.setOrder(2);
   filterRegistrationBean.setFilter(myFilter);
   filterRegistrationBean.setUrlPatterns(new ArrayList<>(Arrays.asList("/api/*")));

   return filterRegistrationBean;
}

@Bean
public FilterRegistrationBean<MyFilter2> setUpMyFilter2() {
   FilterRegistrationBean<MyFilter2> filterRegistrationBean = new FilterRegistrationBean<>();
   filterRegistrationBean.setOrder(1);
   filterRegistrationBean.setFilter(myFilter2);
   filterRegistrationBean.setUrlPatterns(new ArrayList<>(Arrays.asList("/api/*")));
   return filterRegistrationBean;
}
}

 

posted @ 2022-04-15 23:15  与长安故里  阅读(2135)  评论(0编辑  收藏  举报