Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 28258|Resposta: 2

[Fonte] Operação prática: AOP no Spring Boot modifica dinamicamente o valor do parâmetro de solicitação

[Copiar link]
Publicado em 06/11/2021 12:15:55 | | | |
Requisitos: O projeto precisa modificar dinamicamente os parâmetros de requisição, atribuir valores aos parâmetros de requisição de acordo com as permissões do usuário atual, antes que os parâmetros entrem no método controlador, a modificação dos parâmetros de requisição deve ser concluída e, quando o controlador chama a camada de serviço, os parâmetros de requisição podem ser usados como condições para consultar e modificar os dados. Existem dois casos de parâmetros de solicitação:

  • Para usuários com privilégios elevados, você pode usar os valores reais dos parâmetros solicitados
  • Para pessoas com permissões apenas parciais, os valores dos parâmetros de solicitação são modificados dinamicamente com base nas informações vinculadas ao usuário atual


No começo, eu queria implementar isso por um filtro, mas era muito trabalhoso serializar e desserializar o conteúdo do pedido, além de exigir muito julgamento lógico e perda de desempenho. Felizmente, o Spring oferece funcionalidade AOP orientada a face, que pode ser implementada com código simples.

Primeiramente, o projeto Maven pom.xml precisa introduzir o pacote spring-boot-starter-aop, da seguinte forma:

Uma vez que o pacote seja introduzido, podemos usar o recurso AOP, através de@Aspectanotação.

O Aspect suporta 5 tipos de anotações de notificação:

@Before: Pré-notificação, que é executada antes da execução do método

@After: Post-notification, executado após a execução do método

@AfterRunning: Retorna uma notificação, que é executada após o método retornar um resultado

@AfterThrowing: Notificação de exceção, após o método lançar uma exceção

@Around: Notificações de wraparound, ao redor da execução do método

Crie uma Request.java classe genérica de wrapper de pedido:

Crie uma nova classe de dados UserInfo.java solicite específica:

Se o cabeçalho atual da requisição tiver um appid, o valor do parâmetro de requisição appId será modificado; caso contrário, o parâmetro de requisição não será modificado, o código é o seguinte:

Crie um novo controlador HomeController e adicione uma interface com um parâmetro de solicitação contendo Request<UserInfo>, o código é o seguinte:

No caso de testes sem o cabeçalho de requisição appId, o parâmetro de requisição appId é o valor real e não foi modificado, como mostrado na figura a seguir:



Se você tentar adicionar o cabeçalho de solicitação appId, verá que o parâmetro de solicitação appId foi modificado com sucesso, como mostrado na figura a seguir:



Por fim, anexe o código-fonte:O login do hiperlink está visível.





Anterior:Use o iPerf3 para testar as velocidades de comunicação da rede dos dispositivos
Próximo:Instale o software do iDRAC Service Module no VMware ESXi
 Senhorio| Publicado em 06/11/2021 12:21:32 |
No Spring AOP, a lógica de negócios foca apenas no próprio negócio, dividindo registros, estatísticas de desempenho, controle de segurança, processamento de transações, tratamento de exceções, etc., do código da lógica de negócios, e ao separar esses comportamentos, esperamos poder separá-los em métodos que não guiem a lógica de negócios, e então mudar esses comportamentos sem afetar o código da lógica de negócios.
Publicado em 15/03/2023 11:11:04 |
zsdfghjkvbjnm
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com