整合營銷服務商

          電腦端+手機端+微信端=數(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| 国产aⅴ一区二区三区| 精品无码综合一区二区三区| 色欲精品国产一区二区三区AV| 国产综合无码一区二区三区| 精品国产日韩一区三区| 怡红院美国分院一区二区| 国产怡春院无码一区二区| 一区二区亚洲精品精华液| 国产成人精品久久一区二区三区| 亚欧色一区W666天堂| 无码人妻精品一区二区三区99仓本| 亚洲一区二区三区在线观看精品中文| 国产精品一区二区三区免费| 一区二区三区在线观看免费 | 一区二区免费国产在线观看| 成人在线观看一区| 99国产精品欧美一区二区三区| 天堂资源中文最新版在线一区| 国产一区二区草草影院| 亚洲午夜精品一区二区麻豆| 国产未成女一区二区三区| 中文字幕无线码一区2020青青| 中文无码一区二区不卡αv| 亚洲欧美成人一区二区三区| 天天综合色一区二区三区| 蜜桃AV抽搐高潮一区二区| 国产精品亚洲一区二区无码| 成人免费视频一区二区| 国产综合无码一区二区三区| 国产人妖视频一区二区| 久久精品国产AV一区二区三区| 亚洲av无码片vr一区二区三区| 精品一区中文字幕| 在线观看午夜亚洲一区| 97一区二区三区四区久久| 国产一区二区在线观看视频 |