Exigences : Le projet doit modifier dynamiquement les paramètres de requête, attribuer des valeurs aux paramètres de requête selon les permissions de l’utilisateur actuel, avant que les paramètres n’entrent dans la méthode contrôleur, la modification des paramètres de requête doit être terminée, et lorsque le contrôleur appelle la couche de service, les paramètres de requête peuvent servir de conditions pour interroger et modifier les données. Il existe deux cas de paramètres de demande :
- Pour les utilisateurs ayant des privilèges élevés, vous pouvez utiliser les valeurs réelles des paramètres demandés
- Pour les personnes disposant uniquement d’autorisations partielles, les valeurs des paramètres de requête sont modifiées dynamiquement en fonction des informations liées à l’utilisateur actuel
Au début, je voulais l’implémenter via un filtre, mais il était trop lourd de sérialiser et de désérialiser le contenu de la requête, et cela demandait aussi beaucoup de jugement logique et de perte de performance. Heureusement, Spring offre une fonctionnalité AOP orientée face, qui peut être implémentée avec un code simple.
Tout d’abord, le projet Maven pom.xml doit introduire le package spring-boot-starter-aop, comme suit :
Une fois le package introduit, nous pouvons utiliser la fonctionnalité AOP, en@Aspectannotation.
Aspect prend en charge 5 types d’annotations de notification :
@Before: Pré-notification, qui est exécutée avant l’exécution de la méthode
@After: Post-notification, exécuté après l’exécution de la méthode
@AfterRunning: Retourne une notification, qui est exécutée après que la méthode a rendu un résultat
@AfterThrowing: Notification d’exception, après que la méthode ait lancé une exception
@Around: Notifications de wraparound, exécution de la méthode
Créez une classe de requête générique Request.java wrapper :
Créez une nouvelle classe de données UserInfo.java demandez :
Si l’en-tête de requête actuel a un appid, la valeur du paramètre de requête appId sera modifiée, sinon, le paramètre de requête ne sera pas modifié, le code est le suivant :
Créez un nouveau contrôleur HomeController et ajoutez une interface avec un paramètre requête contenant Request<UserInfo>, le code est le suivant :
Dans le cas des tests sans l’en-tête de requête appId, le paramètre de requête appId est la valeur réelle et n’a pas été modifié, comme montré dans la figure suivante :
Si vous essayez d’ajouter l’en-tête de requête appId, vous pouvez voir que le paramètre de requête appId a été modifié avec succès, comme montré dans la figure suivante :
Enfin, joignez le code source :La connexion hyperlientérée est visible.
|