过滤器,拦截器,切面的区别
过滤器:起到过滤筛选作用的一种事物,不过对于java中来说就是对客户端web层的访问过滤,也可以理解为一种预处理手段
常使用的场景:统一编码的设置,过滤敏感字符,登录校验,权限控制等
使用:实现filter接口
详细理解总结:依赖于servlet,在初始化时被调用一次,init()也会只执行一次,dofilter()请求之前执行,destory()一次,基于函数回调实现
拦截器:拦截器是springmvc提供的,类似于过滤器的功效,是对控制层的拦截
常使用的场景:日志记录,登录校验,权限校验
使用:实现HandlerInterceptor接口或继承其子类
详细理解总结:依赖于springmvc,preHandle() 在目标请求完成之前执行,postHandle() 在目标请求之完成后执行,afterCompletion() 在整个请求完成之后,只拦截action请求。基于java的反射机制实现,生命周期中可以多次被调用
切面(apo/aspect)
常使用的场景:日志,一般请求都会要求具体到那个方法,那个参数等,所以切面做日志在合适不过了
切面是过滤器和拦截器的更细分