一、概念

FilterJava Web的三大组件之一。Java Web三大组件分别是ServletFilterListener

Filter的作用一般用于完成通用的操作。例如:登录验证、统一编码处理、敏感字符过滤…在实际开发中,过滤器就是对Web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理,通常都是用来拦截request进行处理,或者对返回的response进行拦截处理。其处理流程见下图:

Filter执行原理

拦截request可以简单理解为,在客户端向后端发送请求时,我们需要对其请求加一些”修饰”,将”修饰”后的请求带到后端。其中这个”修饰”是需要在这个请求的过程中完成的,这里因为是通用操作,可能是对所有的request进行”修饰”,所以并没有在客户端进行编写,否则当再加入一个request请求时,我们又要编写对应的规则,因此我们借用过滤器在请求过程中,对我们需要改写的request进行”修饰”。

其中,这里的”修饰”就可以理解为在原有的request请求中,再加入一些”修改”。例如:在Servlet中过多字符集编码发生变化需要修改时,你是选择对每个Servlet都进行修改,还是会选择一个通用的”规则”,来自动判断帮我们进行修改呢?而这里通用的”规则”就是Filter,我们可以把这些通用的字符集编码配置等工作放在Filter中,由Filter在请求过程中或返回过程中帮我们来实现。