RequestMappingHandlerMapping 简单使用
RequestMappingHandlerMapping 是一个非常便捷的类,它在springMVc启动时加载,有一个最重要方法就是
Map<RequestMappingInfo, HandlerMethod> handlerMethods =requestMappingHandlerMapping.getHandlerMethods();
这个方法可以获取所有类中被@RequestMapping标注过的方法的对象(Method对象)
所以利用它我们可以动态地做一些事情。
例如:目前有一需求需要做权限管理,我决定使用shiro来完成对角色权限的管理。为此我想使用shiro的 @RequirePermissions ,@RequireRoles等注解。
但是shiro的@RequirePermissions使用的时候,注解里的值是需要在数据库中存在的。一般我们是通过写好的后台管理添加某些角色或者权限。但如果,我们的后台权限模块还没写好怎么办???
另一种方法:我们可以写一个测试方法如下
//获取所有带有RequestMapping的方法
Map<RequestMappingInfo, HandlerMethod> handlerMethods = requestMappingHandlerMapping.getHandlerMethods();
Collection<HandlerMethod> values = handlerMethods.values();
for(HandlerMethod temp:values){
RequiresPermissions methodAnnotation = temp.getMethodAnnotation(RequiresPermissions.class);
if(methodAnnotation!=null){
//拥有该注解,所以拿到该注解的值
String annoValue = methodAnnotation.value()[0];
Permission p = new Permission();
p.setPer_id(UUIDTools.uuidStr());
p.setResources(annoValue);
PermissionName methodAnnotation1 = temp.getMethodAnnotation(PermissionName.class);
if(methodAnnotation1!=null){
String value = methodAnnotation1.value();
p.setPermission_name(value);
}
userMapper.savePermissions(p);
}
}
这里的PermissionName注解是自定义注解,用来标示权限的名字意义(存入数据库的权限数据 最起码应该有 id,权限名字,权限表达式)
这样我们就可以动态地获取权限注解和权限表达式放入数据库了而非手动去添加。