Filter分析
springboot 是部署到tomcat上的 然后经过层层处理 最后会调用doFilter函数。
首先先理解重要的类 才知道他如何搞事情的
public class PathMatchingFilterChainResolver implements FilterChainResolver ---根 据url 来匹配对应FilterChain 例如 /update 对应 anno
public class DefaultFilterChainManager implements FilterChainManager --属性有map 存有我们初始化的url和filter的关系
public class ProxiedFilterChain implements FilterChain --存有url匹配到的filter的filter 最后会回调dofilter
OncePerRequestFilter ---实现了dofiter函数 里面调用 doFilterInternal
resolver.getChain(request, response, origChain);就是选出匹配到filter 例如anno
FilterChainResolver类存有FilterChainManager 可以动态管理url对应的关系
this.filters.get(this.index++).doFilter(request, response, this); 最后回到第二图dofilter上 ,他会调用
总结:
1.首先调用已注入容器的 AbstractShiroFilter 的doFilterInternal方法。
2.包装request response 调用executeChain 方法获取 新的 包装好的Filterchain 。
3.再次调用dofilter方法AdviceFilter的 doFilterInternal。