spring boot 獲取專案全部URL
阿新 • • 發佈:2019-02-08
spring boot 專案在做URL許可權控制的時候需要獲得全部的URL,一個一個去controller中找費時費力。而且有的許可權點的命名和URL有一定的對應關係。如果能用程式獲得全部URL,將會省去很多事。下面就介紹一種獲取URL的方法。在專案中新增如下Controller,請求/getAllUrl,即可看到專案所有的URL。當然也可以根據專案將URL寫入資料庫或寫入配置檔案。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller ;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.method.HandlerMethod;
import org.springframework .web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Controller
@RequestMapping("/*")
public class UrlController {
@Autowired
WebApplicationContext applicationContext;
@GetMapping("/getAllUrl")
@ResponseBody
public List<String> getAllUrl(){
RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
//獲取url與類和方法的對應資訊
Map<RequestMappingInfo,HandlerMethod> map = mapping.getHandlerMethods();
List<String> urlList = new ArrayList<>();
for (RequestMappingInfo info : map.keySet()){
//獲取url的Set集合,一個方法可能對應多個url
Set<String> patterns = info.getPatternsCondition().getPatterns();
for (String url : patterns){
urlList.add(url);
}
}
return urlList;
}
}