一:过滤器与拦截器
经常会有文章拿两者进行比较,说的云里雾里让人看不到春天在哪里。个人理解两者直白来讲就两点差距
- 使用上拦截器更加灵活,可以添加不拦截路径,过滤器只能配置实现拦截目标
- 实现上拦截器基于MVC容器属于MVC组件,过滤器基于Servlet容器属于WEB容器
二:过滤器实现
2.1 代码实现
首先继承过滤器抽象类OncePreRequestFilter,重写doFilter()即可。最后调用的doFilterInternal()方法可以理解为流程的继续。如果后续有过滤器则继续过滤,如果无过滤器则实现过滤方法逻辑
2.2 web.xml配置
web.xml文件上只需要配置相对应过滤器实现以及过滤路径即可,这一点与拦截器配置类似
三:执行顺序
3.1 多过滤器
当配置多个过滤器的时候可以看到最后的执行顺序就是按照web.xml文件中声明的顺序执行,这与拦截器类似
配置位置第一过滤器
配置位置第二过滤器
执行完毕控制层逻辑
3.2 过滤器与过滤方法
过滤器调用方法doFilter()之后会执行后面剩余的逻辑,但是注意这里不能再操作request与response,操作无效。所以这个可以认为是骚操作,要这么玩还不如使用拦截器实现