JavaWeb——Filter过滤器

Filter过滤器

    • Filter的使用
    • Filter的生命周期
    • FilterConfig类
    • FilterChain 过滤器链
    • Filter的拦截路径

Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器 。
Filter 过滤器它是 JavaEE 的规范,也就是接口。
Filter 过滤器它的作用是: 拦截请求,过滤响应。

拦截请求常见的应用场景有:
权限检查 、日记操作 、事务管理

Filter的使用

Filter 过滤器的使用步骤:

  1. 编写一个类去实现 Filter 接口
  2. 实现过滤方法 doFilter()
  3. 到 web.xml 中去配置Filter 的拦截路径

下面代码是实现Filter接口的一个实现类,并且重写了过滤方法,用户没有登录就跳转到登录界面,如果登录了就继续访问用户目标资源。

public class AdminFilter implements Filter { 
	/** * doFilter 方 法 , 专 门 用 于 拦 截 请 求 。 可 以 做 权 限 检 查 */ 
	@Override 
	public void doFilter(ServletRequest servletRequest, ServletResponse 	servletResponse,FilterChain filterChain) throws IOException, ServletException {
 		HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
		HttpSession session = httpServletRequest.getSession(); 
		Object user = session.getAttribute("user"); 
		// 如 果 等 于 null , 说 明 还 没 有 登 录 
		if (user == null) {			
		servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse); 	return; 
		} 
		else { // 让 程 序 继 续 往 下 访 问 用 户 的 目 标 资 源 
		filterChain.doFilter(servletRequest,servletResponse); 
		} 
	}
}

下面是Filter的xml配置文件,

JavaWeb——Filter过滤器_第1张图片

Filter的生命周期

  1. 构造器方法
  2. init 初始化方法 第 1,2 步,在 web 工程启动的时候执行(Filter 已经创建)
  3. doFilter过滤方法 第 3 步,每次拦截到请求,就会执行
  4. destroy 销毁 第 4 步,停止 web 工程的时候,就会执行(停止 web工程,也会销毁 Filter 过滤器)

FilterConfig类

它是 Filter 过滤器的配置文件类。
Tomcat 每次创建 Filter 的时候,也会同时创建一个 FilterConfig 类,这里包含了 Filter 配置文件的配置信息。

FilterConfig 类的作用是获取 filter 过滤器的配置内容

  1. 获取 Filter 的名称 filter-name 的内容 filterConfig.getFilterName()
  2. 获取在 Filter 中配置的 init-param 初始化参数 filterConfig.getInitParameter()
  3. 获取 ServletContext 对象

FilterChain 过滤器链

我们在上面的dofilter方法中看到,如果满足过滤器条件,就会执行filterChain.doFilter方法。
而filterChain.doFilter()方法有两个作用:

  1. 执行下一个Filter过滤器(如果有Filter)
  2. 执行目标资源(没有Filter)

注意:多个Filter过滤器执行时,是按照web.xml配置文件的上下顺序,执行Filter过滤器的顺序。

多个Filter过滤器执行的特点:

  • 所有Filter和目标资源都默认在一个线程下执行。
  • 多个Filter共同执行时,都使用一个Request对象。

Filter的拦截路径

精确匹配:

在这里插入图片描述

目录匹配:
在这里插入图片描述

后缀名匹配:
*.html
以上配置的路径,表示请求地址必须以.html 结尾才会拦截到 。

注意:Filter 过滤器它只关心请求的地址是否匹配,不关心请求的资源是否存在

你可能感兴趣的:(JavaWeb学习)