拦截器和过滤器的区别
过滤器
首先说的过滤器,我们配置过滤器的地方是web.xml文件配置,因为过滤器他依赖于servlet容器,在实现上,基于函数回调,它可以对几乎所有的请求进行过滤,都是缺点就是只能再去爱容器中初始化一次,使用过滤器的目的,是用来做一些过滤的操作,获取我们想要的数据,比如:在Javaweb中,对传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后在传入servlet或者Controller进行业务逻辑操作,通常用的场景就是:过滤器中修改字符编码,过滤器中修改HttpServletRequest的一些参数(XSSFilter(自定义过的过滤器)),如过滤低俗文字等等。
2.拦截器
拦截器的配置一般再去爱SpringMVC的配置文件中,使用Interceptors标签。
拦截器,他依赖于web框架,在springMVC中就是依赖于SpringMVC框架。在实现上,基于Java的反射机制,属于面向切面编程(AOP)的一种应用,就是service或者一个方法前,调用一个方法或者在方法后,调用一个方法,如动态代理就是拦截器的简单实现,在调用方法前打印请求参数,也可以调用方法后,调用结果。由于拦截器基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。都是缺点实只能对controller请求进行拦截,对其他的的一些比如直接访问几台资源请求则没有办法进行拦截。
相同点:
1.都有优先处理请求的权利,都可以决定是否将请求转移到请求的实际处理的控制器处。
2.可以对请求发送过来的参数数据的检查和修改。
不同点:
1.拦截器可以做前置处理也可以做后置处理,也可以做完成处理,控制的更加细化。过滤器负责请求处理前面的过滤处理
2.过滤器是servlet规范里面的组件,拦截器是框架Spring里面的组件。
3.过滤器优先执行