SpringMVC中获取所有的路径

首先说说为什么有这么一个需求?

在最近的一个项目中权限这一块,采用 annotation + aop ,在controller的方法上加@Permission(“user:create”)来控制访问。数据库中表`sys_permission` 的 `permission`字段 对应 user:create.

由于先开发功能,最后才配置权限,后来发现写下来有几十个@Permission,不可能把 所有@Permission的值一一全部手动配置到库里。

那么能不能通过拿到所有request路径,然后对应到具体方法,获取注解,从而拿到所有注解的值,然后通过代码初始化到库中?

答案显而易见,肯定可以 废话不多说了,看代码吧

@GetMapping("getAllUrl")
public Set<String> getAllUrl(HttpServletRequest request) {
Set<String> result = new HashSet<String>();
WebApplicationContext wc = (WebApplicationContext)request.getAttribute(DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE);
RequestMappingHandlerMapping bean = wc.getBean(RequestMappingHandlerMapping.class);
Map<RequestMappingInfo, HandlerMethod> handlerMethods = bean.getHandlerMethods();
handlerMethods.forEach((k, v) -> {
ApiOperation annotation = v.getMethod().getAnnotation(Permission.class);
if (annotation != null) {
result.add(annotation.value());
}
});
return result;
}

上述代码只是拿到所有@Permission的value,后续操作,相信聪明的你,应该知道怎么办了 另外,如果对权限有个描述,可以在@Permission 定义一个name属性

坚持原创技术分享,您的支持将鼓励我继续创作!