Java中过滤器与拦截器的区别与使用

  • 拦截器(Interceptor)

拦截器是动态拦截Action调用的对象。它提供一种机制可以使开发者可以定义一个action执行的前后执行的代码,也可以在一个action执行前组织其执行。同时也是提供了一种可以提取的action中可重用的部分的方式

拦截器在AOP中用于某个方法或者字段被访问之前,进行拦截然后在之前或者之后加入某些操作。是实现AOP的一种策略。

拦截器链:拦截器按一定的顺序连成一条链。访问被拦截的方法时拦截器会按顺序被调用。

实现原理:可通过代理的方式实现,详细可以看我的另一篇模拟实现AOP(一)中查看。

  • 过滤器(Filter)

可以在一个请求到达servlet之前,将其截取进行逻辑判断,然后决定是否放行到请求的servlet。也可以在一个response到达客户端之前,截取结果进行逻辑判断,然后决定是否允许返回给客户端。如解决post乱码问题则可以通过滤器解决;

  • 关系

  • 区别

  1. 拦截器是基于反射机制,而过滤器是基于函数回调。
  2. 拦截器实例在一个controller生命周期之内可以多次调用,只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理,而过滤器可以对所有的请求起作用,但是过滤器实例只能在容器初始化时调用一次。
  3. 拦截器它们之间的执行顺序跟在SpringMVC的配置文件中定义的先后顺序有关,而过滤器的运行是依赖于servlet容器的,跟springmvc等框架并没有关系。并且,多个过滤器的执行顺序跟xml文件中定义的先后关系有关。
  • 总结

  1. Filter:过滤器,过滤从客户端向服务器发送的请求。
  2. Interceptor:拦截器,更细粒度化的拦截。(拦截其中的具体的方法)。

猜你喜欢

转载自blog.csdn.net/gary0917/article/details/83589815