整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          MySQL數(shù)據(jù)庫字段級權(quán)限設(shè)計

          一、 引言

          二、 方案

          方案二

          方案三

          對外權(quán)限分配接口

          存在的問題

          三、 代碼

          最初是打算在Spring Aop的前置通知中通過修改目標方法參數(shù)來實現(xiàn),但是通過源碼發(fā)現(xiàn)封裝目標方法參數(shù)的類是用final修飾的,所以后面換了種思路。

          使用Spring的ator自動代理實現(xiàn),思路是通過條件判斷決定是否要使用自動代理,要使用代理的話,就需要自己實現(xiàn)接口并重寫其中invoke方法。

          下面我貼出核心代碼,文章最后會給出整個demo的鏈接

          繼承ator類,重寫()方法

          public class BeanTypeAutoProxyCreator extends AbstractAutoProxyCreator {
              @Override
              protected Object[] getAdvicesAndAdvisorsForBean(Class beanClass, 
                  String beanName, TargetSource customTargetSource) throws BeansException {
                  return isMatch(beanClass) ? PROXY_WITHOUT_ADDITIONAL_INTERCEPTORS : DO_NOT_PROXY;
              }
              /**
               * 判斷是否是需要被代理的對象
               * @param clazz 代理對象的類型
               * @return
               */
              private boolean isMatch(Class clazz) {
                  //有兩個Class類型的類象,一個是調(diào)用isAssignableFrom方法的類對象(后稱對象a),
                  // 以及方法中作為參數(shù)的這個類對象(稱之為對象b),這兩個對象如果滿足以下條件則返回true,否則返回false:
                  
                  //a對象所對應類信息是b對象所對應的類信息的父類或者是父接口,簡單理解即a是b的父類或接口
          

          權(quán)限庫表數(shù)據(jù)設(shè)計怎么做_數(shù)據(jù)庫 權(quán)限表設(shè)計_權(quán)限管理表數(shù)據(jù)庫設(shè)計

          //a對象所對應類信息與b對象所對應的類信息相同,簡單理解即a和b為同一個類或同一個接口 if (BaseMapper.class.isAssignableFrom(clazz)) { return true; } return false; } }

          實現(xiàn)接口,重寫invoke()方法

          public class MyMethodInterceptor implements MethodInterceptor {
              @Autowired
              private SysAccess sysAccess;
              @Override
              public Object invoke(MethodInvocation invocation) throws Throwable {
                  // 權(quán)限封裝類
                  SysAccessCriteria result = null;
                  int flag = -1;
                  // 目標方法的參數(shù)
                  Object[] args = invocation.getArguments();
                  for (int i=0; i數(shù)據(jù)庫 權(quán)限表設(shè)計_權(quán)限庫表數(shù)據(jù)設(shè)計怎么做_權(quán)限管理表數(shù)據(jù)庫設(shè)計

          if(flag >= 0 && result != null){ args[flag] = result; } // 執(zhí)行目標方法 Object object = invocation.proceed(); return object; } }

          配置到Spring配置文件中

          
          
              
              
                  
                      myMethodInterceptor
                  
              
          
          

          Demo完整代碼(數(shù)據(jù)庫文件在目錄下):

          單純個人設(shè)計,應該有很多不足,有不好的地方可以指出,或者有更好的想法可以評論,一起交流。

          參考:


          主站蜘蛛池模板: 亚洲av成人一区二区三区观看在线 | 国模精品视频一区二区三区| 国产天堂在线一区二区三区| 亚洲狠狠狠一区二区三区| 久久久久国产一区二区| 日本v片免费一区二区三区| 亚洲一区二区三区日本久久九 | 国产一区在线mmai| 久久青草精品一区二区三区| 亚洲日本一区二区一本一道| 精品免费国产一区二区| 波多野结衣一区二区| 91一区二区三区四区五区| 久久久91精品国产一区二区| 中文字幕一区二区三区精华液 | 任你躁国语自产一区在| 黄桃AV无码免费一区二区三区| 国产成人av一区二区三区在线观看| 国内精品一区二区三区最新| 中文乱码人妻系列一区二区| 中文字幕在线一区二区在线| 无码人妻精品一区二区三18禁 | 久久青草国产精品一区| 国产精品久久一区二区三区| 视频在线一区二区三区| 亚洲综合色一区二区三区小说| 国产传媒一区二区三区呀| 国产一区二区中文字幕| 天堂一区二区三区精品| 中文字幕精品一区二区精品| 亚洲综合av一区二区三区| 国产波霸爆乳一区二区| 国产成人精品视频一区| 在线视频一区二区三区| 色狠狠一区二区三区香蕉蜜桃| 亚洲一区二区三区丝袜| 亚洲色无码一区二区三区| 国产嫖妓一区二区三区无码| 亚洲一区二区三区不卡在线播放| 国产成人高清视频一区二区| 成人精品视频一区二区|