RequestMappingHandlerMapping 使用

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,权限名字,权限表达式)

这样我们就可以动态地获取权限注解和权限表达式放入数据库了而非手动去添加。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值