Дефендер и Гардер
Для определения дефендера мы абстрагируем его как стратегию защиты замка. Для защиты замка необходимо участие стража, и дефендер является таким стражем.
В сервисе может быть только один дефендер, а связанный с ним гардер будет иметь отношение «МНОГИЕ К ОДНОМУ». Каждый гардер может устанавливать различные режимы и стратегии для отражения или фильтрации посетителей и врагов. Если несколько гардеров работают одновременно, они будут сотрудничать друг с другом для обеспечения безопасности сервиса!
Дефендер — это одноэлементный объект, который можно получить следующим образом:
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, которое определяет используемый режим защиты. Из этого примера видно, что получение объекта гардера также очень просто.
Дефендер предлагает три режима защиты, которые отличаются конфигурацией:
Хотя они различаются, их можно использовать вместе. Ниже мы рассмотрим каждый из них подробнее.
Используя аннотированный режим, мы должны создать соответствующий гардер:
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 более нагляден:
Guarder.builder(GuarderType.URI)
.pattern("POST /user")
.prevener(caller -> {
return Result.pass();
})
Pattern состоит из двух частей: типа запроса и адреса ресурса. Он использует стиль Ant для сопоставления, аналогично режиму на основе выражений, но в режиме URI сопоставляется интерфейс, а в режиме на основе выражений — метод.
Ранее мы узнали о связи между дефендером и гардером, а также о роли гардера. Теперь мы углубимся в детали гардера, чтобы лучше понять и эффективно использовать гардер.
Этот метод требует передачи значения перечисления GuarderType для определения режима защиты гардера и возвращает объект гардера как единственный экземпляр!
Смысл pattern зависит от режима защиты. Например, в режиме URI он состоит из типа запроса и адреса ресурса, что похоже на стиль Ant.
Метод order принимает целочисленное значение, указывающее порядок защиты всех гардеров дефендера. Значение по умолчанию равно 0.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )