1. 简介
Javaweb中的过滤器可以拦截所有访问web资源的请求或响应操作。
![图片[1]-Filter-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/image-78.png)
1.1 过滤器的三要素
1. 拦截
过滤器之所以能够对请求进行预处理,关键是对请求进行拦截,把请求拦截下来才能够做后续的操作。而且对于一个具体的过滤器,它必须明确它要拦截的请求,而不是所有请求都拦截。
2. 过滤
根据业务功能实际的需求,看看在把请求拦截到之后,需要做什么检查或什么操作,写对应的代码即可。
3. 放行
过滤器完成自己的任务或者是检测到当前请求符合过滤规则,那么可以将请求放行。所谓放行,就是让请求继续去访问它原本要访问的资源。
2. 代码演示
1. 创建Target01Filter,实现Filter接口
![图片[2]-Filter-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/3b6c332857e8ff89ce4bae8d8fce18c-1024x422.png)
2. 通过注解启用过滤器
![图片[3]-Filter-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/a18708f588f29c0d0034cc402a28e42-1024x501.png)
除了注解方式,也可以在配置文件中设置
![图片[4]-Filter-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/86faa91b73728f396e7fbb393e29e2d-1024x372.png)
3. 结果
![图片[5]-Filter-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/image-79.png)
3. 过滤器生命周期
和Servlet生命周期类比,Filter生命周期的关键区别是:在Web应用启动时创建对象。
生命周期阶段 | 执行时机 | 执行次数 |
创建对象 | Web应用启动时 | 一次 |
初始化 | 创建对象后 | 一次 |
拦截请求 | 接收到匹配的请求 | 多次 |
销毁 | Web应用卸载前 | 一次 |
4. 过滤器链
4.1 概念
实际工作中,我们可能有多个过滤器,每个过滤器负责不同的功能。
- 多个Filter的拦截范围如果存在重合部分,那么这些Filter会形成Filter链。
- 浏览器请求重合部分对应的目标资源时,会依次经过Filter链中的每一个Filter。
- Filter链中每一个Filter执行的顺序是由web.xml中filter-mapping配置的顺序决定的。
![图片[6]-Filter-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/image-80.png)
4.2 演示
同样方式分别创建Target02Filter,Target03Filter。
![图片[7]-Filter-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/image-81.png)
![图片[8]-Filter-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/image-82.png)
© 版权声明
THE END
暂无评论内容