概念
Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感字符处理等等..…
定义类,实现Filter接口,并重写其所有方法
可以快速new Filter模板新建
配置Filter拦截资源的路径:在类上定义@WebFilter注解
web.xml中配置<filter-mapping>在doFilter方法中书写放行前和放行后逻辑代码,在逻辑中间书写放行代码

代码实现
package com.itheima.web.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
//@WebFilter("/hello.jsp")
@WebFilter("/*")
public class FilterDemo2 implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//1. 放行前,对 request数据进行处理
System.out.println("2.FilterDemo...");
//放行
chain.doFilter(request,response);
//2. 放行后,对Response 数据进行处理
System.out.println("4.FilterDemo...");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
目的就是解耦,流水线的思想

如果是通过xml配置文件配置的话就取决于web.xml的<filter-mapping>的顺序。
过滤时候我们要选择性放行,比如登录验证案例里如果判断用户不存在跳转注册界面,此时要注意登录和注册页面都会有相应的CSS、js等文件,如果/*里判断直接通过用户不存在就全部拦截的话会导致页面失去原有的样子,此时我们应当添加一个免除过滤的资源路径数组再循环遍历比较拦截的资源是否在免除过滤资源路径数组中二选择放行,但最终在链式传递的过程中归来的时候(该过程好比递归,先递再归)最后回到最初的位置判断是不能放行登录的即可。