1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/gmarshal-foruo-sc-permission

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.MD

StringBuilder("select * from (").append(sbSql).append(" ) s where s.regionCd like concat("+ regionCd +",'%') ");

}

return sbSql.toString();

ResultInterceptor.java

/*

  • mybatis данные полномочия перехватчик - handleResultSets

  • для результатов проводить фильтрацию

  • @author GaoYuan

  • @date 2018/4/17 утро 9:52 /* @Intercepts({ @Signature(type = ResultSetHandler.class, method = "handleResultSets", args={Statement.class}) }) @Component public class ResultInterceptor implements Interceptor { /** журнал */ private static final Logger log = LoggerFactory.getLogger(ResultInterceptor.class);

    @Override public Object plugin(Object target) { return Plugin.wrap(target, this); }

    @Override public void setProperties(Properties properties) {}

    @Override public Object intercept(Invocation invocation) throws Throwable { if(log.isInfoEnabled()){ log.info("входить ResultInterceptor перехватчик..."); } ResultSetHandler resultSetHandler1 = (ResultSetHandler) invocation.getTarget(); //через java отражение получать mappedStatement атрибут значение //можно получать mybatis внутри resultype MappedStatement mappedStatement = (MappedStatement)ReflectUtil.getFieldValue(resultSetHandler1, "mappedStatement"); //получать аспект объект PermissionAop permissionAop = PermissionUtils.getPermissionByDelegate(mappedStatement);

      //выполнять запрос метод, и сохранять полученный результат в result
      Object result = invocation.proceed();
      if(permissionAop != null) {
          if (result instanceof ArrayList) {
              ArrayList resultList = (ArrayList) result;
              for (int i = 0; i < resultList.size(); i++) {
                  Object oi = resultList.get(i);
                  Class c = oi.getClass();
                  Class[] types = {String.class};
                  Method method = c.getMethod("setRegionCd", types);
                  // вызывать obj объект method метод
                  method.invoke(oi, "");
                  if(log.isInfoEnabled()){
                      log.info("данные полномочия обработка [фильтрация результата]...");
                  }
              }
          }
      }
      return result;

    } }

Где PermissionAop для dao слоя пользовательский аспект, используется для включения или выключения данных полномочий фильтрации.

Трудности

  1. Как в перехватчике получать dao слой аннотации содержимое;
  2. Как получать текущий логин человека идентификатор;
  3. Как передавать динамические параметры;
  4. Нужно учитывать с sql разбиение на страницы приоритет.

Ответ

Перехватчик получать dao слой аннотацию

Разные методы перехватчика получать метод немного отличается, конкретный в выше PrepareInterceptor.java и ResultInterceptor.java код самостоятельно проверять.

Получать текущий логин человека идентификатор

Из-за разных фреймворков или разных проектов, получение текущего дня логин человека метод может отличаться, тогда только через конфигурацию способ динамически передавать получение текущего логин человека метода передавать полномочиям центру. Конфигурационный файл добавлять:

# клиент получать текущий логин человека идентификатор
permission.client.userid.method=com.raising.sc.permission.example.util.UserUtils.getUserId

Затем использовать Java отражение механизма, запускать getUserId( ) метод.

Передача динамических параметров

Например, пользователь A может только запрашивать свои собственные единицы и нижестоящие единицы все данные; Конфигурация центра конфигурации где часть sql следующая:

org_cd like concat(${orgCd},'%')

Тогда через PrepareInterceptor.java читать выше sql, и через базу данных или конфигурацию файла установленные параметры [orgCd] связанные методы (аналогично получению текущего логин человека идентификатора способ), заранее в полномочиях параметрах (orgCd) конфигурация соответствующий метод путь, параметр значения типа, возвращаемое значение типа и т. д.

Конфигурационный файл или база данных получать orgCd соответствующий метод путь:

com.raising.sc.permission.example.util.UserUtils.getRegionCdByUserId

Конечно, сейчас это просто простой динамический параметр, остальное ещё нужно дальнейшее развитие, здесь только простейшая попытка.

Расширение

С точки зрения продукта, этот модуль должен иметь три части:

1、foruo-permission-admin данные полномочия управление платформой 2、foruo-permission-server данные полномочия сервер (предоставлять полномочия связанные интерфейсы) 3、foruo-permission-client данные полномочия клиент (упаковывать API)

В сочетании с прикладной логической схемой можно завершить содержание этого модуля.

Затронутые знания:

  • Mybatis перехватчик
  • Java отражение механизма

Исходный код проекта

Код облака: https://gitee.com/gmarshal/foruo-sc-permission

Адрес блога

https://my.oschina.net/gmarshal/blog/1797026

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Поскольку большинство проектов компании используют MyBatis, а также перехватчики MyBatis для обработки постраничного вывода данных, было решено начать работу непосредственно с перехватчиками. Развернуть Свернуть
Java и 2 других языков
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/gmarshal-foruo-sc-permission.git
git@api.gitlife.ru:oschina-mirror/gmarshal-foruo-sc-permission.git
oschina-mirror
gmarshal-foruo-sc-permission
gmarshal-foruo-sc-permission
V1.0