shiro框架源码解析与改造(四)---PathMatchingFilterChainResolver

这个类有两个成员变量
private PatternMatcher pathMatcher = new AntPathMatcher();
private FilterChainManager filterChainManager;

filterChainManager是由上文创建的,pathMatcher 是用于匹配路径的。
核心方法是getChain(ServletRequest request, ServletResponse response, FilterChain originalChain) ;
作用是为每一个request分配给它对应的filter链。

原版中只要匹配到一个链接链就结束了,这里我改成匹配所有拦截链,合并filter。
这个方法返回的是ProxiedFilterChain的实例。

@Override
    public FilterChain getChain(ServletRequest request, ServletResponse response, FilterChain originalChain) {
        FilterChainManager filterChainManager = this.getFilterChainManager();
        if(!filterChainManager.hasChains()) {
            return null;
        } else {
            String requestURI = this.getPathWithinApplication(request);
            Iterator var6 = filterChainManager.getChainNames().iterator();

            String pathPattern;
            Set<String> paths=null;
            while (var6.hasNext()){
                pathPattern = (String)var6.next();
                if (this.pathMatches(pathPattern, requestURI)){
                    if (paths==null)
                        paths=new HashSet<>();
                    paths.add(pathPattern);
                }
            }
//            do {
//                if(!var6.hasNext()) {
//                    return null;
//                }
//                pathPattern = (String)var6.next();
//            } while(!this.pathMatches(pathPattern, requestURI));
            if (paths==null)
                return null;
            return filterChainManager.proxy(originalChain, paths);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值