过滤器、拦截器

过滤器(Filter)

过滤非法请求(未登录),过滤非法字符

通俗理解:选择符合要求

拦截器(Interceptor)

面向切面(AOP,Aspect Oriented Program),在方法执行前、执行后,或者抛出异常时调用

动态代理是拦截器的简单实现

通俗理解:干预方法执行

过滤器与拦截器区别

1、拦截器是基于反射,过滤器基于函数回调

2、拦截器不依赖servlet容器,过滤器依赖servlet容器

3、拦截器只对action请求起作用,过滤器对几乎所有请求起作用

4、拦截器可以访问action上下文、值、栈里面的对象,而过滤器不可以

5、在action的生命周期中,拦截器可以多次被调用,而过滤器只在容器初始化时被调用一次

6、拦截器可以获取IOC容器中的各个bean,过滤器不行,在拦截器里注入一个service,可以调用业务逻辑

过滤器触发时机

请求开始:请求进入容器之后,进入servlet之前

请求返回:在servlet处理完成,返回给前端之前

过滤器包裹servlet,servlet包裹拦截器

Tomcat容器 > Filter > Servlet > Inteceptor > Controller

SpringMVC拦截器

类似servlet开发中的过滤器

1、日志记录

2、权限检查

3、性能监控,记录方法执行时间

4、通用行为,读取cookie放入请求,提取Locale、Theme

5、OpenSessionInView,如Hibernate,进入处理器之前打开session,完成后关闭session

执行流程

1、Filter Pre,执行chain.doFilter(request、response)之前的逻辑

2、Service,SpringMVC的doService()即Servlet的service()

3、Dispatcher,SpringMVC的请求分发方法

4、PreHandle,执行controller之前

5、Controller

6、PostHandle,执行controller之后,return ModelAndView之前,设置ModelAndView

7、AfterCompletion,controller的return之后,Filter返回客户端之前

8、FilterAfter,服务器端逻辑全部执行完成之后,执行返回客户端之前的逻辑

浙ICP备11005866号-12