# JavaWebFilter
**Repository Path**: fowner/java-web-filter
## Basic Information
- **Project Name**: JavaWebFilter
- **Description**: JavaWeb三大组件之FIlter学习笔记
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-11-07
- **Last Updated**: 2022-06-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Filter技术
## Filter概述
+ Filter是JavaWeb三大组件之一。
+ Filter是JavaEE的规范。
+ Filter作用是拦截请求,过滤响应。
拦截请求常用的应用场景
+ 权限检查
+ 日志记录
+ 事务管理
等
## Filter开始之前的体验
```
要求:
在web工程目录下有一个admin文件夹,这个文件夹的资源必须在登陆之后才能允许访问。
思考:
1.如何检查用户是否登陆?
由于当用于登陆后,信息会被保留到session中。所以查看sessino中是否有用户登陆信息即可。
实现:
在jsp文件中加入西面代码。
<%
Object user = session.getAttribute("user");
//判断用户是否为空
if(user == null){
request.getRequestDispatcher("/login.jsp").forward(request,response);
return ;
}
%>
问题:
由于上面代码是java代码,html中不能写,所以这种方法智能针对jsp文件进行设定。
那么html文件怎么办呢?那么Filter就登场了。
```
## Filter过滤器的使用
+ 创建Filter的实现类去实现Filter接口
+ 重写doFilter的方法
+ 到web.xml中配置拦截器的拦截路径
使用Filter实现登录页面的功能。
## Filter的生命周期
+ 构造器方法
web服务启动时执行。
+ init方法
web服务启动时执行
+ doFilter方法
每次拦截到请求就会被执行
+ destory方法
web服务停止的时候就会执行。
## FilterConfig类
### FilterConfig类概述
```
FilterConfig就是Filter过滤器的的配置类.
Tomcat启动,创建Filter的的时候就会创建一个FilterConfig类对象,这里包含了Filter的配置信息。
```
### FilterConfig类的作用
+ 获取过滤器的名称即Filter-name标签的值。
+ 获取过滤器的初始参数即init-param标签的值。
+ 获取ServletContext对象。
## FilterChain过滤链
### 概述
```
FilterChain过滤链就是多个过滤器的时候如何执行。如果不是最后一个过滤器,则按照web.xml中filter-mapping的定义的先后顺序往下执行。
如果是最后一个过滤器了,则执行目标资源。
```
### 作用
+ 往下继续执行过滤器
+ 执行目标资源
### 当FilterChain过滤器有多个Filter时的特点
+ 多个Filter的执行顺序的先后是由在web.xml中定义的先后(从上到下)顺序决定的。
注意:由于Filter是根据URL进行过滤的,最先走到的是filter-mapping标签,所以上面所说的定义的先后顺序是指filter-mapping标签的位置顺序。
+ 多个Filter执行的时候默认是同一个线程目标资源也是同一个线程
+ 执行的时候是同一个request对象。(因为同一次请求)
## Filter拦截器路径
### 精确匹配
+ 例
/target.jsp
表示URL地址必须是:http://服务地址:端口/工程目录/target.jsp
### 目录匹配
+ 例
/admin/*
表示URL地址必须是以:http://服务地址:端口/工程目录/admin/ 开头
### 后缀名匹配
+ 例1
*.jsp
表示URL地址必须以.jsp结尾
+ 例2
*.do
表示URL地址必须以.do结尾
注:不能是含有/否则错误