Spring中Filter和Interceptor的区别

mvc

Interceptor

主要做用:拦截用户请求,进行处理,好比判断用户登陆状况、权限验证,只要针对Controller请求进行处理,是经过HandlerInterceptorspring

Interceptor分两种状况,一种是对会话的拦截,实现spring的HandlerInterceptor接口并注册到mvc的拦截队列中,其中preHandle()方法在调用Handler以前进行拦截(上图步骤3),postHandle()方法在视图渲染以前调用(上图步骤5),afterCompletion()方法在返回相应以前执行;另外一种是对方法的拦截,须要使用@Aspect注解,在每次调用指定方法的前、后进行拦截。mvc

Filter

主要做用:过滤字符编码、作一些业务逻辑判断,主要用于对用户请求进行预处理,同时也可进行逻辑判断。框架

Filter在请求进入servlet容器执行service()方法以前就会通过filter过滤(上图步骤1),不像Intreceptor同样依赖于springmvc框架,只须要依赖于servlet。Filter启动是随WEB应用的启动而启动,只须要初始化一次,之后均可以进行拦截。函数

Filter有以下几个种类:post

  • 用户受权Filter:检查用户请求,根据请求过滤用户非法请求;
  • 日志Filter:记录某些特殊的用户请求;
  • 解码Filter:对非标准编码的请求解码。

Filter和Interceptor的区别

  1. Filter是基于函数回调(doFilter()方法)的,而Interceptor则是基于Java反射的(AOP思想)。
  2. Filter依赖于Servlet容器,而Interceptor不依赖于Servlet容器。
  3. Filter对几乎全部的请求起做用,而Interceptor只能对action请求起做用。
  4. Interceptor能够访问Action的上下文,值栈里的对象,而Filter不能。
  5. 在action的生命周期里,Interceptor能够被屡次调用,而Filter只能在容器初始化时调用一次。
  6. Filter在过滤是只能对request和response进行操做,而interceptor能够对request、response、handler、modelAndView、exception进行操做。
相关文章
相关标签/搜索