美文网首页
AntPathMatcher 完成 Servlet path 通

AntPathMatcher 完成 Servlet path 通

作者: 蓉漂里的小白 | 来源:发表于2021-02-25 19:54 被阅读0次

    在我们实际项目中经常遇到url的模糊匹配和*号的通配,如果我们手写匹配规则代码量很大,也很复杂,今天就介绍一个springframework提供的工具类AntPathMatcher

    1:背景

    最近公司要二次开发一个认证授权项目,用于对公司内部的Saas服务进行认证和授权。
    因为我们数据库中存储的接口地址有一部分是模糊地址(方便授权),例如:/a/, /b/x/
    1:当我们对用户A授权/a/后,那么A用户就可以访问/a/b/c ,/a/d 既然:以/a/开头的所有地址。
    2:当我们对用户A授权/a/
    /c后,那么A用户就可以访问/a/b/c ,/a/d/c 但不能访问/a/b/d

    2:实现

    如果我们自己去手写这个代码工作量大,而且不稳定,其实springframework里已经给我们提供这样的类就是:AntPathMatcher ,核心就是这个类的match方法,完成url的模糊匹配和映射,下面就来演示一下使用方式:

      private static boolean checkUrlMatch(String url1, String url2) {
        AntPathMatcher antPathMatcher = new AntPathMatcher();
        if (Objects.equals(url1, url2) || url2.startsWith(url1) || antPathMatcher.match(url2, url1)) {
          return true;
        } else {
          return false;
        }
      }
    

    url1就是目的地址,url2就是待匹配的地址,如果相等,或者url1可以匹配上url2就代表有权限,下面是测试用例

        String targetUrl = "/sib/*/c";
    
        AntPathMatcher antPathMatcher = new AntPathMatcher();
        boolean match1 = antPathMatcher.match(targetUrl, "/sib/a");
        boolean match2 = antPathMatcher.match(targetUrl, "/sib/a/c");
        boolean match3 = antPathMatcher.match(targetUrl, "/sib/a/b");
        System.out.println(match1);
        System.out.println(match2);
        System.out.println(match3);
    

    输出结果:


    image.png

    相关文章

      网友评论

          本文标题:AntPathMatcher 完成 Servlet path 通

          本文链接:https://www.haomeiwen.com/subject/ukwufltx.html