Filter是在Servlet 2.3之后增加的新功能,当需要限制用户访问某些资源或者在处理请求时提前处理某些资源的时候,就可以使用过滤器完成。Filter 过滤器主要是用来过滤用户请求的,它允许我们对用户请求进行前置处理和后置处理,比如实现 URL 级别的权限控制、过滤非法请求等等。
过滤器是以一种组件的形式绑定到WEB应用程序当中的,与其他的WEB应用程序组件不同的是,过滤器是采用了“链”的方式进行处理的。
自定义filter需要经过以下几步:
- 实现
javax.servlet.Filter
接口 - 实现
init
方法,读取过滤器的初始化参数 - 实现
doFilter
方法,完成对请求或响应的过滤 - 调用
FilterChain
接口对象的doFilter
方法,向后续的过滤器传递请求或响应(链式)
1 | // javax.servlet.Filter接口 |
1. 自定义filter
这里定义了两个filter,分别是FilterA和FilterB。
FilterA
1 |
|
FilterB
1 |
|
2. 配置过滤器,确定执行顺序,过滤URI
filterRegistrationBean.setOrder(1);
确定两个过滤器的执行顺序。
FilterA过滤"/user/*", "/department/getAllDepartment"
FilterB过滤"/user/*", "/department/geDepartmenttById"
1 |
|
3. 注解形式配置过滤器
此时不再需要编写2中的配置类了,直接由注解进行配置。其中,@Order(1)
配置过滤器顺序,@WebFilter
FilterA
1 |
|
FilterB
1 |
|
最后,需要在启动类上加上 @ServletComponentScan
注解
1 |
|
4. Controller
1 |
|
5. 运行程序,请求
启动程序后,初始化了过滤器
发起请求/user/getAllUsers
,按照配置,两个过滤器都要处理这个请求
发起请求/department/getAllDepartment
,FilterA执行
发起请求/department/geDepartmenttById
,FilterB执行