聊聊 filter,interceptor,aop
总结:filter,interceptor,aop,的思想其实都是对一些公用的东西的 抽取。
从范围来讲:filter 是最外层,对容器的 url 全部有用,如静态 文件,action 等,可获取容器的一些内容,只能用于Web程序中 是Servlet规范规定。
interceptor 只对 action 有用,可以作用 具体的 类和方法。
aop 对spring管理的bean 有用,具体到类 和方法。
从实现来讲:filter 基于回调
interceptor 基于反射机制
aop 基于代理
都是链式 调用
===========before doFilter1
===========before doFilter2
===========HandlerInterceptorAll preHandle
===========HandlerInterceptor1 preHandle
===========HandlerInterceptor2 preHandle
执行Controller
Controller return前
===========HandlerInterceptor2 postHandle
===========HandlerInterceptor1 postHandle
===========HandlerInterceptorAll preHandle
Controller return后,Jsp加载完成
===========HandlerInterceptor2 afterCompletion
===========HandlerInterceptor1 afterCompletion
===========HandlerInterceptorAll preHandle
===========before doFilter2
===========before doFilter1
请求流程图:
作用:
- 日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV...
- 权限检查:认证或者授权等检查
- 性能监控:通过拦截器在进入处理器之前记录开始时间,处理完成后记录结束时间,得到请求处理时间。
- 通用行为:读取cookie得到用户信息并将用户对象放入请求头中,从而方便后续流程使用。
看图说话: