一、登录校验--Filter详细执行过程(拦截路径)
demoFilter
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(urlPatterns = "/*")
public class DemoFilter implements Filter {
@Override//初始化,只调用一次
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
System.out.println("init进行了初始化");
}
@Override//拦截到请求之后的调用,调用多次
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("demo拦截到了请求--放行前的逻辑");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("demo拦截到了放行后的逻辑");
}
@Override//销毁方法,只调用一次
public void destroy() {
Filter.super.destroy();
}
}
在启动类中添加@ServletComponentScan注解
@ServletComponentScan//开启了对servlet组件的支持
@SpringBootApplication
public class DdWebManagementApplication {
public static void main(String[] args) {
SpringApplication.run(DdWebManagementApplication.class, args);
}
}
在postman的运行后,控制台输出的结果
1
2
3
拦截路径 | urlPatterns值 | 含义 |
拦截具体路径 | /login | 只有访问/login路径时,才会被拦截 |
目录拦截 | /emps/* | 访问/emps下的所有资源,都会被拦截 |
拦截所有 | /* | 访问所有资源,都会被拦截 |
二、登录校验--Filter详细执行过程(过滤器链)
新建一个新的过滤器abcFilter:
@WebFilter(urlPatterns = "/*")
public class abcFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("abc拦截到了请求--放行前的逻辑");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("abc拦截到了放行后的逻辑");
}
}
可以看到结果是先执行了abcFilter,然后再执行的demoFilter,这是因为注解配置的Filter,优先级是按照过滤器类名的自然排序。