博主上次分析完cas客户端源码后,发现了其实就是一个过滤器模式,对请求以及session一直做校验,每个过滤器都有各自的工作,互不影响耦合性低,所以就模仿其源码,做了一次过滤器模式的学习,图示如下
其实过滤器整个类可以不用,只不过在jetty中,过滤器整合类不知有过滤器还有其他属性,比如config配置等。如下:参考即可
好了,我们来看一下过滤器模式,一个过滤器接口定义方法,多个实现类去实现具体操作过滤,一个整合类增加一个过滤器,一个过滤器链表去实现以节点类型,依次进行过滤
该接口进行定义方法:
DemoFilter
多个实现类:
AFilterImpl
BFilterImpl
一个整合类
FilterHolder
一个过滤器链表
DemoFilterChain
进行测试
1 import java.util.ArrayList; 2 import java.util.List; 3 4 /** 5 * @title: TestMain 6 * @Author junyu 7 * 旧巷里有一个穿着白衬衫笑起来如太阳般温暖我的少年。 8 * 记忆里有一个穿着连衣裙哭起来如孩子般讨人喜的女孩。 9 * 他说,哪年树弯了腰,人见了老,桃花落了白发梢,他讲的笑话她还会笑,那便是好。 10 * 她说,哪年国改了号,坟长了草,地府过了奈何桥,她回头看时他还在瞧,就不算糟。 11 * @Date: 2020/7/18 13:40 12 * @Version 1.0 13 */ 14 public class TestMain { 15 16 public static void main(String[] args) { 17 List<DemoFilter> list = new ArrayList<>(); 18 AFilterImpl aFilter = new AFilterImpl(); 19 BFilterImpl bFilter = new BFilterImpl(); 20 list.add(aFilter); 21 list.add(bFilter); 22 DemoFilterChain demoFilterChain = new DemoFilterChain(list); 23 24 List<String> filterList = new ArrayList<>(); 25 filterList.add("this is filter string"); 26 filterList.add("this is filter end"); 27 28 demoFilterChain.doFilter(filterList); 29 30 } 31 }
输出结果:
AFilterImpl is beginning
BFilterImpl is beginning
list`s body:
this is filter string,this is filter end,