一 点睛
主要涉及两个类和两个方法。
AbstractShiroFilter类的getExecutionChain方法。
PathMatchingFilterChainResolver类的getChain方法。
二 getExecutionChain方法
// 获取拦截器链流程
protected FilterChain getExecutionChain(ServletRequest request, ServletResponse response, FilterChain origChain) {
FilterChain chain = origChain;
// 获取相应的FilterChainResolver,默认使用 PathMatchingFilterChainResolver 进行解析
FilterChainResolver resolver = getFilterChainResolver();
if (resolver == null) {
log.debug("No FilterChainResolver configured. Returning original FilterChain.");
return origChain;
}
// 通过FilterChainResolver根据当前请求解析到新的FilterChain拦截器链
FilterChain resolved = resolver.getChain(request, response, origChain);
if (resolved != null) {
log.trace("Resolved a configured FilterChain for the