管理系统权限模块技术方案

来源:互联网 发布:手机网络dns被劫持 编辑:程序博客网 时间:2024/05/21 13:58
一个管理系统,有各种不同的功能,不是所有的功能都开放给任何用户,不同的用户会有不同功能的权限。权限模块需要做到两点,1.记录用户能使用的功能集合 2.管理界面只渲染用户能使用的功能。

    分享一个实现方案。

    每个功能入口设置一个权限码,整数的。借助自定义的注解可以很好的标注入口方法的权限码。数据库里存储用户的所有功能的权限。mysql里借助bit数组实现。0表示没这个权限,1表示有这个权限。

    那么,用户每次发送请求的时候,服务端如何得到用户的权限码?客户端发给服务端吗?用spring mvc拦截器+反射的技术组合可以先得到用户请求的Method,然后借助这个Method拿到权限码注解。之后的工作就是用这个权限码去对比用户的权限bit位数组了。

    根据用户请求获取目标方法Method代码实例如下:

[java] view plaincopy
  1. private Method getTargetMethod(Object handler,HttpServletRequest request){  
  2.         Method result=null;  
  3.         try{  
  4.             String[] clazzPath=null;  
  5.             RequestMapping clazzMap=handler.getClass().getAnnotation(RequestMapping.class);  
  6.             if(clazzMap!=null&&clazzMap.value()!=null&&clazzMap.value().length>0){  
  7.                 clazzPath=clazzMap.value();  
  8.             }  
  9.             for(Method method:handler.getClass().getDeclaredMethods()){  
  10.                 RequestMapping requestMapping=method.getAnnotation(RequestMapping.class);  
  11.                 if(requestMapping==null||requestMapping.value()==null||requestMapping.value().length==0){  
  12.                     continue;  
  13.                 }  
  14.                 boolean requestOk=false;  
  15.                 String uri=request.getRequestURI().replace(".json","").replace(".xml","");  
  16.                 for(String item:requestMapping.value()){  
  17.                     if(clazzPath!=null){  
  18.                         for(String path:clazzPath){  
  19.                             if(uri.equals(path+item)){  
  20.                                 return method;  
  21.                             }  
  22.                         }  
  23.                     }else {  
  24.                         if(uri.equals(item)){  
  25.                             return method;  
  26.                         }  
  27.                     }  
  28.                 }  
  29.             }  
  30.         }catch (Exception ex){  
  31.             logger.error("getTargetMethod err",ex);  
  32.         }  
  33.   
  34.         return result;  
  35.     } 
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我能怎么办图片带字 我该怎么办图片带字 学化妆找不到模特练妆怎么办? cf进房间闪退怎么办 手游cf账号封了怎么办 大门牙缺了一块怎么办 缺了一颗牙齿怎么办 CF购买医疗包竞猜币没到账怎么办 CF手游昵称不合法怎么办 微信gif尺寸过大怎么办 微信表情上限300怎么办 太受欢迎了怎么办快穿 兔宝宝沾上人气味怎么办 我该怎么办的文字图片 爱奇艺缓存视频显示下载失败怎么办 把老公惹生气了怎么办 苹果x用电量太快怎么办 小中考地生没过怎么办 如果遇到不负责的语文老师怎么办 孩子的语文老师教的不好怎么办 刚买的小猫很凶怎么办 2月幼犬不吃东西怎么办 小狗狗不吃狗粮怎么办 母猫不会照顾小猫怎么办 刚买的小狗拉稀怎么办 母兔子吃小兔子怎么办 照片照出来背亮景人是黑的怎么办 手机透明壳变黄了怎么办 ae视频渲染太慢怎么办 3ce口红太干了怎么办 中考误用0.38mm的笔怎么办 ps画笔都锁住了怎么办 削铅笔机坏了怎么办 幼儿园小朋友不听老师话怎么办 孩子在幼儿园不听老师话怎么办 幼儿园大班孩子上课不好好上怎么办 脸上挠了血印子怎么办 大班公开课烫伤了怎么办教案 孩子心理出现了问题该怎么办 幼师打孩子很多家长告怎么办 课堂上纪律不好的学生怎么办