Filter(过滤器)
Filter 介绍
过滤器的基本概念
Servlet 过滤器从字面可理解为经过一层层的过滤处理才达到使用的要求,而其实 Servlet 过滤器就是服务器与客户端请求与响应的中间层组件。
在实际项目开发中 Servlet 过滤器主要用于对浏览器的请求进行过滤处理,将过滤后的请求再转给下一个资源。
过滤器是以一种组件的形式绑定到 Web 应用程序当中的,与其他的 Web 应用程序组件不同的是,过滤器是采用了“链”的方式进行处理的,如下所示:
Filter
Filter(过滤器)是 JavaWeb 三大组件之一(另外两个是 Servlet 和 Listener),是在 2000 年发布的 Servlet2.3 规范中加入的一个接口,是 Servlet 规范中非常实用的技术。
当需要限制用户访问某些资源或者在处理请求时提前处理某些资源的时候,就可以使用过滤器(Filter)完成。
- 当一个请求访问服务器资源时,服务器首先判断会是否有过滤器与请求资源相关联,如果有,过滤器会先将请求拦截下来,完成一些特定的功能,再由过滤器决定是否继续交给请求资源进行处理。
- 响应也是类似的。
Filter 应用场景:
- URL 级别的权限控制
- 过滤敏感词汇
- 中文乱码问题
- ...
Servlet 的 Filter 特点:
-
声明式的
通过在 web.xml 配置文件中声明,允许添加、删除过滤器,而无须改动任何应用程序代码或 JSP 页面。 -
灵活的
过滤器可用于客户端的直接调用执行预处理和后期的处理工作,通过过滤链可以实现一些灵活的功能。 -
可移植的
由于现今各个 Web 容器都是以 Servlet 的规范进行设计的,因此 Servlet 过滤器同样是跨容器的。 -
可重用的
基于其可移植性和声明式的配置方式,Filter 是可重用的。
总的来说,Servlet 的过滤器是通过一个配置文件来灵活的声明的模块化可重用组件。过滤器动态的截获传入的请求和传出的响应,在不修改程序代码的情况下,透明的添加或删除他们。其独立于任何平台和 Web 容器。
Filter API
Filter
Filter 是一个接口。如果想实现过滤器的功能,则必须实现该接口。
核心方法:
返回值 | 方法名 | 作用 |
---|---|---|
void | init(FilterConfig config) | 初始化方法 |
void | doFilter(ServletRequest request, ServletResponse response, FilterChain chain) | 对请求资源和响应资源进行拦截 |
void | destroy() | 销毁方法 |
配置方式:
-
方式一:使用注解
@WebFilter("拦截路径")
-
方式二:web.xml 配置
FilterChain
-
FilterChain 是一个接口,代表过滤器链对象,由 Servlet 容器提供实现类对象,我们直接使用即可。
-
过滤器可以定义多个,就会组成过滤器链。
核心方法:
返回值 | 方法名 | 作用 |
---|---|---|
void | doFilter(ServletRequest request, ServletResponse response) | 放行方法 |
- 如果有多个过滤器,则会在第一个过滤器中再调用下一个过滤器,依次类推,直到到达最终访问资源。
- 如果只有一个过滤器,放行时,就会直接到达最终访问资源。