在我们实际项目中经常遇到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
网友评论