美文网首页
过滤器的使用以及和拦截器的区别

过滤器的使用以及和拦截器的区别

作者: 文景大大 | 来源:发表于2021-02-10 15:44 被阅读0次

一、过滤器的使用

过滤器Filter就是在网络请求达到处理逻辑之前对请求进行一些过滤和处理。当然我们可以在处理中加入一些想要的逻辑,从而实现一些类似AOP的功能。

首先,我们需要创建一个Filter,需要实现servlet提供的Filter接口;

@Slf4j
public class PrintRequestTimeCostFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        long requestBeginTime = System.currentTimeMillis();
        filterChain.doFilter(servletRequest,servletResponse);
        log.info("访问{}的时间耗费是{}", ((RequestFacade) servletRequest).getRequestURI(), System.currentTimeMillis() - requestBeginTime);

    }
}

其次,我们需要进行配置,这里采用JavaConfig的形式:

@Configuration
public class FilterConfig {

    @Bean
    public FilterRegistrationBean registerFilter(){
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new PrintRequestTimeCostFilter());
        registrationBean.addUrlPatterns("/*");
        registrationBean.setName("PrintRequestTimeCostFilter");
        registrationBean.setOrder(1);
        return registrationBean;
    }

}

此时我们的过滤器Filter就已经生效了,启动程序后任意请求达到服务器都能打印出来访问耗费的时间。

除了采用JavaConfig的方式进行过滤器的配置,我们可以基于注解直接在过滤器类上进行配置:

@WebFilter(urlPatterns = "/*", filterName = "PrintRequestTimeCostFilter")

然后在启动类上加上如下注解。

@ServletComponentScan

二、过滤器和拦截器的异同分析

我们在先前一篇文章中《基于HandlerInterceptor的拦截器使用及实现》,我们介绍了拦截器的使用。那么过滤器和拦截器有什么异同呢?

2.1 相同点

  • 都是AOP面向切面编程的一种实现,都可以对请求进行拦截和过滤,做一些前置操作;

2.2 不同点

  • Filter基于servlet,原理是采用的回调机制;拦截器基于Spring,原理是采用的动态代理反射技术;
  • Filter可以对任意类型的请求进行拦截,包括静态资源等;而拦截器只能对action请求类型进行处理;
  • 拦截器可以对action请求上下文内容进行访问,但是Filter不行;

相关文章

  • 拦截器的配置以及解决跨域问题

    本章介绍拦截器和过滤器的区别,如何配置拦截器Interceptor以及在拦截器中解决跨域问题项目源码:https:...

  • 拦截器和过滤器

    拦截器和过滤器功能很相似 拦截器和过滤器的区别 过滤器 过滤器filter,自己都是实现filter接口,然后do...

  • SpringBoot添加过滤器Filter

    1. 拦截器和过滤器 先说一下,过滤器和拦截器的区别和联系。 1.1 相同点 首先过滤器和拦截器都能实现请求的筛选...

  • 20170907-Spring MVC拦截器

    Filter(过滤器)与Interceptor(拦截器)的区别 区别 ①拦截器interceptor是基于Java...

  • java拦截器和过滤器的区别

    过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。②拦截器不依赖与servlet...

  • 拦截器和过滤器详解

    过滤器和拦截器的区别: 拦截器是基于java的反射机制的,而过滤器是基于函数回调。 拦截器不依赖与servlet容...

  • 过滤器,拦截器,监听器的区别

    过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。②拦截器不依赖与servlet...

  • Spring-Interceptor

    过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。 ②拦截器不依赖与servle...

  • Spring MVC拦截器

    SpringMvc的拦截器和过滤器的区别 1.拦截器是使用JDK动态代理实现的,拦截的是对应调用方法的拦截2.过滤...

  • Springboot过滤器和拦截器详解及使用场景

    一、过滤器和拦截器的区别 1、过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前...

网友评论

      本文标题:过滤器的使用以及和拦截器的区别

      本文链接:https://www.haomeiwen.com/subject/qelcxltx.html