Filter过滤器学习
1 基本介绍
1.1 filter介绍
- Filter:翻译为过滤器,是JavaEE的规范,也就是接口
- Filter作用:拦截请求,过滤响应
- 请求拦截场景:
- 权限检查
- 日记操作
- 事务管理
1.2 简单实现过滤器
- (1)创建filter,实现接口Filter,重写doFilter()方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public class AdminFilter implements Filter {
/** 对拦截的请求进行过滤操作 */
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 权限控制处理,例如判断session中是否有用户信息
HttpServletRequest request = (HttpServletRequest) servletRequest;
Object user = request.getSession().getAttribute("user");
if (user == null) {
// 拦截并响应
servletResponse.setContentType("text/html; charset=UTF-8");
servletResponse.getWriter().write("你无权访问此资源!");
return;
}
// 放行,向下一个过滤器执行
filterChain.doFilter(servletRequest, servletResponse);
}
}
- (2)web.xml配置过滤器,以及拦截路径
1
2
3
4
5
6
7
8
9
10<filter>
<filter-name>adminFilter</filter-name>
<filter-class>filter.AdminFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>adminFilter</filter-name>
<!-- * :表示admin的子目录的所有资源(包括孙子目录)都拦截 -->
<!-- url-pattern支持写多个 -->
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
1.3 注解实现
1 | // 单个urlpatterns |
2 路径匹配
- (1)精确匹配
- 精确匹配访问资源的路径
/admin/nokopara.jpg
:只拦截admin目录下的nokopara.jpg图片
- (2)目录匹配
- 匹配该目录下的所有资源
/admin/*
:拦截admin目录下的所有资源
- (3)后缀名匹配
- 匹配指定后缀名的资源路径
*.jpg
:拦截所有jpg后缀名的资源- 注意:后缀名匹配不能以
/
开头
3 多个过滤器执行顺序
- (1)过滤器在web.xml配置
- 按照web.xml配置的过滤器从上往下进行匹配,路径匹配成功,进行该过滤器的
doFilter()
方法
- (2)过滤器在注解配置
- 通过过滤器名字进行字母排序执行
4 生命周期
5 FilterConfig类
- FilterConfig,能获取一些filter的配置信息
- FilterConfig在
public void init(FilterConfig filterConfig)
的方法中