1.执行流程:当过滤器拦截到请求之后,会先执行拦截前的逻辑,然后放行,当访问完资源后,又会回到过滤器中,执行放行完逻辑。
package com.fzb.Filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
* @author by FZB
* @date 2023/7/20
* 注意:init 和 destroy方法在创建Filter对象时,默认执行
*/
//@WebFilter注解用于将一个类声明为Web过滤器(Filter)的组件。
@WebFilter(urlPatterns = "/*") // /* 代表拦截所有请求
public class Filter implements javax.servlet.Filter {
//初始化算法,只调用一次
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init 初始化方法执行了");
}
//拦截到请求之后调用,调用多次
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("拦截到了请求,过滤前执行");
//放行 调用filterChain提供的方法放行
//doFilter方法有两个参数,一个是Request对象,还有一个是Response对象
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("过滤后执行");
}
//销毁方法,在服务器关闭时执行,只调用一次
@Override
public void destroy() {
System.out.println("destroy 销毁方法执行了");
}
}
控制台打印结果如下
2.Filter可以根据需求,配置不同的拦截资源路径
拦截路径 | urlPatterns值 | 含义 |
拦截具体路径 | /login | 只有访问/login路径时,才会被拦截 |
目录拦截 | /user | 访问/user下的所有资源,都会被拦截 |
拦截所有 | /* | 表示拦截所有请求 |