当前位置: 首页 > 后端技术 > Java

ServletFilter原理解析及实战

时间:2023-04-01 18:33:29 Java

ServletFilter原理解析及实战ServletFilter采用责任链模型实现Filter的调度和执行,通过FilterChain管理Filter的执行,实现Filter之间的逻辑解耦。本文对Filter的扩展功能进行了简化,大家可以清楚的看到责任链模式的实现骨架。责任链模式ChainofResponsibility目的:通过Chain封装调用环节,实现Filter解耦Chain维护Filter集合,提供Filter管理接口和调用下一个Filter类的接口FilterChain{//Filter集合List过滤器=新的ArrayList<>();//下一个Filter的下标intidx;/**管理接口添加/更新/删除*/publicvoidaddFilter(Filterfilter){filters.add(filter);}/**调用下一个Filter.doFilter*/publicvoiddoNextFilter(){if(idx==filters.size()){return;}Filterfilter=filters.get(idx++);filter.doFilter(这个);}}Filter只需要实现你自己的逻辑然后大喊next(chain.doNextFilter)日志-----开始");//调用下一个chain.doNextFilter();System.out.println("日志------结束");}}classAuthFilter实现Filter{@OverridepublicvoiddoFilter(FilterChainrams(wrappedRequest));System.out.println("请求载荷:"+reqUtil.getPayLoad(wrappedRequest));System.out.println("退出Servlet过滤器");chain.doFilter(wrappedRequest,response);}}总结Filter通过责任链调用,由FilterChain统一管理和调度。目的是解耦FilterFilter适用场景:请求头处理/IP防刷/敏感词过滤/资源访问控制