Кастомизация логики операций с хранилищами данных#

Принцип кастомизации#

Blitz Identity Provider позволяет кастомизировать логику операций с хранилищами данных. Для этого используется Java-класс с фиксированным именем и пакетом com.identityblitz.idp.store.id.logic.dynamic.

Существуют восемь пользовательских процедур, по одной для каждой операции с фиксированным именем класса:

  • searchUserCustomSearchUsersLogic.java

  • getUserCustomGetUserLogic.java

  • findUserCustomFindUserLogic.java

  • bindUserCustomBindUserLogic.java

  • changeUserPasswordCustomChangeUserPasswordLogic.java

  • addUserCustomAddUserLogic.java

  • updateUserCustomUpdateUserLogic.java

  • deleteUserCustomDeleteUserLogic.java

Конфигурация#

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

  1. Поместите Java-файлы с пользовательской логикой в каталог:

    /usr/share/identityblitz/blitz-config/dynamic/idstore/<operation_name_in_lowercase>
    

    Например, для чтобы включить пользовательскую логику для searchUsers и bindUser, поместите файлы CustomSearchUsersLogic.java и CustomBindUserLogic.java в каталоги /usr/share/identityblitz/blitz-config/dynamic/idstore/searchusers и /usr/share/identityblitz/blitz-config/dynamic/idstore/binduser соответственно.

  2. Откройте файл конфигурации /usr/share/identityblitz/blitz-config/blitz.conf.

    sudo vim /usr/share/identityblitz/blitz-config/blitz.conf
    
  3. Добавьте новый блок logic в блок конфигурации blitz.prod.local.idp.id-stores. Блок должен содержать имена кастомизируемых операций, указанных в качестве ключа и секцию {"enabled": true} в качестве значения ключа.

    Кастомизация операций searchUsers и bindUser#
    {
      "logic": {
        "searchUsers": {
          "enabled": true
        },
        "bindUser": {
          "enabled": true
        }
      }
    }
    

Написание пользовательской процедуры#

Пользовательские процедуры для всех операций имеют одинаковую спецификацию, но используют собственный контекст и служебные функции. Каждый метод в процедурах соответствует определенному состоянию процесса выполнения операции. В методах необходимо реализовать логику перехода к следующему циклу (с последующим вызовом нового метода) или завершения операции.

Каждый метод в процедуре возвращает пару LoopOutput и OperationState. LoopOutput может быть:

  1. терминальный – завершает логический цикл работы одним из следующих способов:

    • ошибка;

    • успех (результат успеха для определенной операции);

    • заключительная операция сохранения (выполнить операцию сохранения с некоторыми параметрами и завершить с результатом).

  2. задача - требуется больше итераций цикла:

    • запрос к хранилищу на выполнение определенной операции;

    • запрос к внешнему веб-сервису.

На данный момент механизм работы пользовательских процедур находится на стадии бета-тестирования. Вы можете запросить подробную спецификацию Java и получить консультацию по возможностям кастомизации в своей среде у наших технических специалистов по адресу support@idblitz.ru.