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

OSCHINA-MIRROR/ainilili-defender

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
DOC_CN.md 7.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 10:43 f97d51b

Дефендер и Гардер

Для определения дефендера мы абстрагируем его как стратегию защиты замка. Для защиты замка необходимо участие стража, и дефендер является таким стражем.

В сервисе может быть только один дефендер, а связанный с ним гардер будет иметь отношение «МНОГИЕ К ОДНОМУ». Каждый гардер может устанавливать различные режимы и стратегии для отражения или фильтрации посетителей и врагов. Если несколько гардеров работают одновременно, они будут сотрудничать друг с другом для обеспечения безопасности сервиса!

Дефендер

Дефендер — это одноэлементный объект, который можно получить следующим образом:

Defender.getInstance()

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

Defender.getInstance().registry(guarder).ready()

После регистрации гардера мы вызываем метод ready, что является обязательным шагом. Это сигнал дефендеру о том, что всё готово. После выполнения этого метода дефендер начинает подготовительную работу. Когда этот метод завершает выполнение, подготовка дефендера завершается!

Гардер

Получить гардер очень просто, его конструктор приватен, чтобы сделать процесс инициализации более элегантным. Вот полный процесс создания экземпляра гардера:

Guarder.builder(GuarderType.URI)
        .pattern("POST /user")
        .order(1)
        .preventer(caller -> {
            return Result.pass();
        })

Здесь order не является обязательным параметром, но позволяет настроить порядок защиты для нескольких гардеров. Самый первый гардер можно назвать авангардом. При вызове метода builder необходимо передать значение перечисления GuarderType, которое определяет используемый режим защиты. Из этого примера видно, что получение объекта гардера также очень просто.

Режимы защиты дефендера

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

  • аннотированный;
  • основанный на выражении;
  • URI (в стиле Ant).

Хотя они различаются, их можно использовать вместе. Ниже мы рассмотрим каждый из них подробнее.

Аннотированный режим

Используя аннотированный режим, мы должны создать соответствующий гардер:

Guarder.builder(GuarderType.ANNOTATION)
        .pattern("org.nico.trap.controller")
        .preventer(caller -> {
            return Result.pass();
        })

Затем мы добавляем аннотацию @Access к методу, который нужно защитить:

@Access(AuthConst.LOGIN)
@PostMapping("/")
public ResponseVo<GameFullVo> publishGame(@RequestBody GamePublishVo gameVo) throws TrapException{
    GameFullVo gameFullVo = gameService.publishGame(gameVo);
    return new ResponseVo<GameFullVo>(ResponseCode.SUCCESS, gameFullVo);
}

Значение, переданное в аннотации @Access, может быть определено в соответствии с конкретной системой. Дефендер не имеет строгого определения! Для каждого режима формат pattern отличается. В аннотированном режиме pattern представляет пакет, и все методы в этом пакете с аннотацией @Access будут защищены.

Режим на основе выражения

По сравнению с аннотированным режимом, режим на основе выражений имеет более высокий уровень детализации, но более универсален. Мы можем получить гардер в режиме на основе выражений следующим образом:

Guarder.builder(GuarderType.EXPRESSION)
        .pattern("* org.nico.trap.controller.UserController.*(..)")
        .preventer(caller -> {
            return Result.pass();
        })

Этот формат отличается от аннотированного режима. Здесь pattern представляет собой выражение выполнения.

URI (стиль Ant)

Режим URI более нагляден:

Guarder.builder(GuarderType.URI)
        .pattern("POST /user")
        .prevener(caller -> {
            return Result.pass();
        })

Pattern состоит из двух частей: типа запроса и адреса ресурса. Он использует стиль Ant для сопоставления, аналогично режиму на основе выражений, но в режиме URI сопоставляется интерфейс, а в режиме на основе выражений — метод.

Детали гардера

Ранее мы узнали о связи между дефендером и гардером, а также о роли гардера. Теперь мы углубимся в детали гардера, чтобы лучше понять и эффективно использовать гардер.

Метод builder гардера

Этот метод требует передачи значения перечисления GuarderType для определения режима защиты гардера и возвращает объект гардера как единственный экземпляр!

Метод pattern гардера

Смысл pattern зависит от режима защиты. Например, в режиме URI он состоит из типа запроса и адреса ресурса, что похоже на стиль Ant.

Метод order гардера

Метод order принимает целочисленное значение, указывающее порядок защиты всех гардеров дефендера. Значение по умолчанию равно 0.

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/ainilili-defender.git
git@api.gitlife.ru:oschina-mirror/ainilili-defender.git
oschina-mirror
ainilili-defender
ainilili-defender
master