过滤器与拦截器的区别java
过滤器,是在java web中,你传入的request,response提早过滤掉一些信息,或者提早设置一些参数,而后再传入servlet或者struts的 action进行业务逻辑,好比过滤掉非法url(不是login.do的地址请求,若是用户没有登录都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符web
拦截器,是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法好比动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者作其它业务逻辑的操做),也能够在你调用方法后打印出字符串,甚至在你抛出异常的时候作业务逻辑的操做。spring
拦截器与过滤器的区别 :apache
执行顺序 :过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。我的认为过滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登陆用户不能访问内部页面的处理);过滤经过后,拦截器将检查用户提交数据的验证,作一些前期的数据处理,接着把处理后的数据发给对应的Action;Action处理完成返回后,拦截器还能够作其余过程(还没想到要作啥),再向上返回到过滤器的后续操做。编程
拦截器与过滤器使用场景:cookie
SpringMVC的处理器拦截器相似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。函数
一、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。性能
二、权限检查:如登陆检测,进入处理器检测检测是否登陆,若是没有直接返回到登陆页面;url
三、性能监控:有时候系统在某段时间莫名其妙的慢,能够经过拦截器在进入处理器以前记录开始时间,在处理完后记录结束时间,从而获得该请求的处理时间(若是有反向代理,如apache能够自动记录);spa
四、通用行为:读取cookie获得用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都须要的便可使用拦截器实现。
五、OpenSessionInView:如hibernate,在进入处理器打开Session,在完成后关闭Session。
拦截器是AOP的一种实现,底层经过动态代理模式完成。
总结:
1.过滤器:所谓过滤器顾名思义是用来过滤的,在Java web中,你传入的request,response提早过滤掉一些信息,或者提早设置一些参数,而后再传入servlet或者struts的action进行业务逻辑,好比过滤掉非法url(不是login.do的地址请求,若是用户没有登录都过滤掉),或者在传入servlet或者struts的action前统一设置字符集,或者去除掉一些非法字符(聊天室常常用到的,一些骂人的话)。filter 流程是线性的, url传来以后,检查以后,可保持原来的流程继续向下执行,被下一个filter, servlet接收等.
2.java的拦截器 主要是用在插件上,扩展件上好比 hivernate spring struts2等 有点相似面向切片的技术,在用以前先要在配置文件即xml文件里声明一段的那个东西。