如何使用AntPathMatcher实现网关的自定义白名单

本文介绍了如何在API网关中通过YAML文件配置白名单列表,使用Spring的ConfigurationProperties和单例模式的AntPathMatcher进行URL路径匹配,以决定是否执行鉴权逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.yaml文件中配置白名单列表

# api网关增加白名单
whitelist:
  urls:
    - "/xxx/notice/**"

2.读取配置文件中的白名单列表

@Component
@ConfigurationProperties(prefix = "whitelist")
public class WhitelistConfig {
    private Set<String> urls = new HashSet<>();

    public Set<String> getUrls() {
        return urls;
    }

    public void setUrls(Set<String> urls) {
        this.urls = urls;
    }
}

3.创建单例模式的AntPathMatcher,这个有多中方式,我们可以使用单例模式通过双重校验,通过new 来创建单例模式的AntPathMatcher,也可以利用spring对对象的管理来实现

@Configuration
public class AntPathMatcherHolder {
    @Bean(name = "whiteUrlMatcher")
    public AntPathMatcher antPathMatcher() {
        return new AntPathMatcher();
    }
}

4.应用,对进入网关的url进行验证如果是在白名单中,则不走认证鉴权逻辑,否则保持原有的鉴权校验逻辑

 private boolean isInWhitelist(String url) {

        //此处根据实际情况进行处理为实际的路径
        LOGGER.info("白名单的url路径:****** {}",url);
        String pattern = "/api/[^/]+/[^/]+(/.+)";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(url);
        if(m.find()){
            String targetPart = m.group(1);
            Set<String>  whitList = whitelistConfig.getUrls();
            if(whitList.isEmpty()){
                return false;
            }
            Iterator<String> iterator = whitList.iterator();
            while (iterator.hasNext()) {
                String pat = iterator.next();
                if(antPathMatcher.match(pat, targetPart)){
                    return true;
                }
            }
        }
        return false;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值