Filter概述
- 概念:Filter 过滤器,是JavaWeb 三大组件(Servlet、Filter、Listener)之一。
- 过滤器可以把对资源的请求拦截拦截下来,从而实现一些特殊的功能。
- 过滤器一般完成一些通用的操作,比如:登录校验、统一编码处理、敏感字符处理等。
Filter快速入门
- 定义Filter:定义一个类,实现 Filter 接口,并重写其所有方法。
- 配置Filter: Filter类上加 @WebFilter 注解,配置拦截资源的路径。引导类上加 @ServletcomponentScan 开启Servlet组件
@WebFilter(urlPatterns = "/*")//设置拦截请求路径,当前拦截所有请求
public class DemoFilter implements Filter {
//初始化方法,Web服务器启动,创建Filter时调用,只调用一次
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init方法运行了");
}
//拦截到请求时,调用该方法,可调用多次
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("doFilter方法运行了");
filterChain.doFilter(servletRequest, servletResponse);//放行操作
}
//销毁方法,服务器关闭时调用,只调用一次
public void destroy() {
System.out.println("destroy方法运行了");
}
}
@ServletComponentScan//开启Servlet组件
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Filter详解
- Filter执行流程
请求 -->放行前逻辑 -->放行 -->资源 -->放行后逻辑
//拦截到请求时,调用该方法,可调用多次
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("doFilter方法运行了");
System.out.println("放行前的操作");
filterChain.doFilter(servletRequest, servletResponse);//放行操作
System.out.println("放行后的操作");
}
- Filter拦截路径
Filter 可以根据需求,配置不同的拦截资源路径
@WebFilter(urlPatterns = “/*”)访问所有资源,都会被拦截
拦截路径 | urlPatterns值 | 含义 |
---|---|---|
拦截具体路径 | /login | 只有访问 /ogin 路径时,才会被拦截 |
目录拦截 | /emps/* | 访问/emps下的所有资源,都会被拦截 |
拦截所有 | /* | 访问所有资源,都会被拦截 |
- 过滤器链
介绍:一个web应用中,可以配置多个过滤器,这多个过滤器就形成了一个过滤器链。
顺序:注解配置的Filter,优先级是按照过滤器类名(字符串)的自然排序
执行流程如图所示:
标签:System,Filter,println,过滤器,拦截,public From: https://blog.csdn.net/qq_52848267/article/details/142284703注意:当有多个Filter时,会按照过滤器的类名(字符串)的顺序来执行的。
比如:AFilter过滤器比BFilter过滤器先执行