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

Вид: 28258|Ответ: 2

[Источник] Практическая работа: AOP в Spring Boot динамически изменяет значение параметра запроса

[Скопировать ссылку]
Опубликовано 06.11.2021 12:15:55 | | | |
Требования: Проекту необходимо динамически изменять параметры запроса, назначать значения параметрам запроса в соответствии с правами текущего пользователя, до того как параметры попадут в метод контроллера, необходимо завершить изменение параметров запроса, и когда контроллер вызывает сервисный уровень, параметры запроса могут использоваться как условия для запроса и изменения данных. Существует два случая запроса параметров:

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


Сначала я хотел реализовать это через фильтр, но было слишком громоздко сериализировать и десериализировать запрос, а также требовало много логического суждения и потери производительности. К счастью, Spring предоставляет функциональность AOP, ориентированную на лицо, которую можно реализовать с помощью простого кода.

Прежде всего, проект Maven pom.xml должен представить пакет spring-boot-starter-aop, а именно так:

После запуска пакета мы можем использовать функцию AOP, через@Aspectаннотация.

Aspect поддерживает 5 типов аннотаций уведомлений:

@Before: Предварительное уведомление, которое выполняется до выполнения метода

@After: Пост-уведомление, выполняемое после выполнения метода

@AfterRunning: Возвращает уведомление, которое выполняется после того, как метод возвращает результат

@AfterThrowing: Уведомление об исключениях, после того как метод выдает исключение

@Around: Оберточные уведомления о выполнении метода

Создайте Request.java универсальный класс обёртки запросов:

Создайте новый UserInfo.java запросите специфический класс данных:

Если в текущем заголовке запроса есть appid, значение параметра appId будет изменено, иначе параметр запроса не изменяется, код выглядит следующим образом:

Создайте новый контроллер HomeController и добавьте интерфейс с параметром запроса, содержащим Request<UserInfo>, код выглядит следующим образом:

В случае тестирования без заголовка appId параметр appId является фактическим значением и не изменяется, как показано на следующем рисунке:



Если попытаться добавить заголовок запроса appId, можно увидеть, что параметр appId был успешно изменен, как показано на следующем рисунке:



Наконец, приложите исходный код:Вход по гиперссылке виден.





Предыдущий:Используйте iPerf3 для тестирования скорости сетевой связи устройств
Следующий:Установка программного обеспечения iDRAC Service Module на VMware ESXi
 Хозяин| Опубликовано 06.11.2021 12:21:32 |
В Spring AOP бизнес-логика сосредоточена только на самом бизнесе, разделяя логирование, статистику производительности, контроль безопасности, обработку транзакций, обработку исключений и т.д. от бизнес-логического кода, и, разделяя эти поведения, мы надеемся разделить их на методы, не направляющие бизнес-логику, а затем менять эти поведения, не влияя на код бизнес-логики.
Опубликовано 15.03.2023 11:11:04 |
zsdfghjkvbjnm
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com