Spring MVC拦截器和过滤器的区别
如果觉得写的还可以,点个赞支持一下笔者呗!你的点赞和关注会让我更快更新哦。笔者会持续更新关于Java和大数据有关的文章。目前集中精力在更新java框架的内容。
Inteceptor
主要作用:对URL请求进行前置/后置过滤
通过实现Spring的Handlerlnteceptor接口,其中preHandle()方法在调用Handler之前进行拦截,postHandle()方法在视图渲染之前调用,afterCompletion()方法在返回响应之前执行;
Filter
Filter在请求进入Servlet容器执行service()方法之前就会经过Filter过滤,不像Intreceptor一样依赖于Springm vc框架,只需要依赖于Servlet。Filter启动是随WEB应用的启动而启动,只需要初始化一次,以后都可以进行拦截。
Filter有如下几个种类:
- 用户授权Filter:检查用户请求,根据请求过滤用户非法请求;
- 日志Filter:记录某些特殊的用户请求;
- 解码Filter:对非标准编码的请求解码。
Filter可以拦截多个请求和响应,一个请求和响应也可以被多个Filter拦截。
Filter和Inteceptor的区别
1、Filter接口在javax.Servlet包下面。Inteceptor定义在org.Springframework.web.Servlet中
2、Filter基于Filter接口中的doFilter回调函数,是Servlet容器支持的;而Inteceptor则基于Java本身的反射 机制(AOP思想),是Spring框架支持的
3、Filter是依赖于Servlet容器的,没有Servlet容器就无法回调doFilter方法,而Inteceptor与Servlet无关;
4、Filter的过滤范围比Inteceptor大,Filter除了过滤请求外通过通配符可以保护页面、图片、文件等,而Inteceptor只能过滤请求,只对请求起作用,在请求之前开始,在请求完成后结束(如被拦截,不执行请求)。
5、Filter的过滤一般在加载的时候在init()方法声明,而Inteceptor可以通过在xml声明是guest请求还是user 请求,来辨别是否过滤。
6、Inteceptor可以访问请求上下文、值栈里的对象,而Filter不能。
7、在请求的生命周期中,拦截器可以被多次调用,而过滤器只能在容器初始化时被调用一次。