restful鑑權白名單匹配url

C&Z發表於2020-10-16

需求

在我們開發的中會遇到這樣一種情況,在鑑權的時候,需要過濾掉白名單,例如:定義有這樣一個url:good/detail/{id},需要判斷uri是否能通過,傳統的equals方法似乎有點難(PS:如果能用equals方法解決的請在評論區告訴我)

幸好spring提供了一個很好用的類,用於匹配

AntPathMatcher antPathMatcher = new AntPathMatcher(); 
// path路徑是否符合pattern的規範 
boolean match = antPathMatcher.match("/user/*", "/user/a"); 
System.out.println(match); 
match = antPathMatcher.match("/user/**", "/user/a/b"); 
System.out.println(match); 
match = antPathMatcher.match("/user/{id}", "/user/1"); System.out.println(match); 
match = antPathMatcher.match("/user/name", "/user/a"); System.out.println(match); 
boolean pattern = antPathMatcher.isPattern("user/{id}"); System.out.println(pattern); 
// 匹配是不是以path打頭的地址 
boolean matchStart = antPathMatcher.matchStart("/1user/a", "/user"); System.out.println(matchStart); 
// 對路徑進行合併 --> /user/a/b 
String combine = antPathMatcher.combine("/user", "a/b"); 
System.out.println(combine); 
// 找出模糊匹配中 通過*或者? 匹配上的那一段配置 
String extractPathWithinPattern = antPathMatcher.extractPathWithinPattern("/user/?", "/user/1"); 
System.out.println(extractPathWithinPattern); 
// 找出模糊匹配中 找到匹配上的項 如果匹配規則和要匹配的項規則不一致 會報錯 
Map<String, String> extractUriTemplateVariables = antPathMatcher .extractUriTemplateVariables("{appName:[\\p{L}\\.]+}-sources-{version:[\\p{N}\\.]+}.jar", "demo-sources-1.0.0.jar"); 
if (null != extractUriTemplateVariables) { 
Iterator<String> iterator = extractUriTemplateVariables.keySet().iterator(); 
while (iterator.hasNext()) { 
	String key = iterator.next(); 
	System.out.println("extractUriTemplateVariables:" + 				  extractUriTemplateVariables.get(key)); 
} 

相關文章