Springmvc Filter过滤器执行链

116 阅读1分钟

模拟filter过程 

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;


/**
 * @Author pzy
 * @Version 0.1.0
 * 模拟过滤器方法演示
 * <p>
 * 特殊的拦截器作用
 */

interface Filter {
    boolean invoke();
}

interface Servlet {
    void dispatch();
}

class FilterChain {
    public List<Filter> filters = new CopyOnWriteArrayList<>();//过滤器(请求数据过滤)

    private Servlet servlet;//控制器(例子: DispatcherServlet)

    public FilterChain(List<Filter> filters, Servlet servlet) {
        this.filters.addAll(filters);
        this.servlet = servlet;
    }

    public void doFilter() {//执行过滤链
        for (int i = 0; i < filters.size(); i++) {
            if (!filters.get(i).invoke()) {
                return;
            }
        }
        servlet.dispatch();
    }

}

public class FilterChainTests {
    public static void main(String[] args) {

        Filter filter01 = () -> {
            System.out.println("filter--->01");
            return true;

        };

        Filter filter02 = () -> {
            System.out.println("filter------>02");
            return true;
        };

        Servlet servlet = () -> System.out.println("servlet-------->start others");

        List<Filter> listAll = new CopyOnWriteArrayList<>();
        listAll.add(filter01);
        listAll.add(filter02);

        FilterChain filterChain = new FilterChain(listAll, servlet);
        filterChain.doFilter();
    }

}

之前的一个笔记,现在重新整理一下