编程知识 cdmana.com

Vérification des permissions d'interface pour le démarrage du printemps à l'aide d'annotations personnalisées AOP +.

Note d'utilisationAOP+L'annotation personnalisée complète la vérification des permissions de l'interface,Les codes sont les suivants::

pomFichier Ajouter les dépendances requises:

1 <dependency>
2     <groupId>org.aspectj</groupId>
3     <artifactId>aspectjrt</artifactId>
4     <version>1.8.9</version>
5 </dependency>
6 <dependency>
7     <groupId>org.springframework.boot</groupId>
8     <artifactId>spring-boot-starter-aop</artifactId>
9 </dependency>

Personnaliser d'abord les annotations@MyAnnotation,Les paramètres requis peuvent être définis dans l'annotation:

 1 package com.itcq.aop;
 2 
 3 import java.lang.annotation.*;
 4 
 5 //Définir la portée des annotations disponibles
 6 @Target({ElementType.TYPE, ElementType.METHOD})
 7 @Retention(RetentionPolicy.RUNTIME)
 8 @Documented
 9 public @interface MyAnnotation {
10 
11     String name();
12 }

Définir l'annotation de résolution MyAnnotationService, Logique pour compléter la vérification des permissions d'interface , Je suis là. Obtenir une demande d'interface headerDansuser_nameParamètres,Effectuer la vérification:

 1 package com.itcq.aop;
 2 
 3 import lombok.extern.slf4j.Slf4j;
 4 import org.aspectj.lang.ProceedingJoinPoint;
 5 import org.aspectj.lang.Signature;
 6 import org.aspectj.lang.annotation.Around;
 7 import org.aspectj.lang.annotation.Aspect;
 8 import org.aspectj.lang.annotation.Pointcut;
 9 import org.springframework.stereotype.Component;
10 import org.springframework.web.context.request.RequestContextHolder;
11 import org.springframework.web.context.request.ServletRequestAttributes;
12 
13 import javax.servlet.http.HttpServletRequest;
14 
15 @Aspect
16 @Component
17 @Slf4j
18 public class MyAnnotationService {
19 
20     // L'expression point - cut détermine si la coupe est annotée ou pour toutes les classes et méthodes sous un chemin , La méthode doit être de retourner voidType
21     @Pointcut("@annotation(com.itcq.aop.MyAnnotation)")
22     private void roleCheckCut() {};
23 
24     // Définit la logique de traitement de la section . C'est - à - dire que la méthode a ajouté @MyAnnotationNotes, La vérification des permissions sera effectuée 
25     @Around("roleCheckCut()")
26     public Object operateAuth(ProceedingJoinPoint pjp) throws Throwable {
27 
28         //Imprimer le journal
29         Signature signature = pjp.getSignature();
30         String className = pjp.getTarget().getClass().getSimpleName();
31         String methodName = signature.getName();
32         log.info("className:{},methodName:{}", className, methodName);
33 
34         // Obtenir une demande d'interface headerDansuser_nameParamètres,Effectuer la vérification
35         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
36         String userName = request.getHeader("user_name");
37         //Ici, oui.Apollo Configurer les rôles qui peuvent être libérés 
38         if (!"hwy".equals(userName)) {
39             throw new Exception(userName+" La vérification des permissions a échoué ");
40         }
41         return pjp.proceed();
42     }
43 }

Enfin,controller Écrire des méthodes d'essai en couches ,UtilisationpostmanInterface d'essai:

 1 package com.itcq.controller;
 2 
 3 import com.itcq.aop.MyAnnotation;
 4 import com.itcq.service.TestService;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.web.bind.annotation.GetMapping;
 7 import org.springframework.web.bind.annotation.RequestHeader;
 8 import org.springframework.web.bind.annotation.RequestParam;
 9 import org.springframework.web.bind.annotation.RestController;
10 
11 @RestController
12 public class TestController {
13 
14     @Autowired
15     private TestService testService;
16 
17     @GetMapping("/test")
18     @MyAnnotation(name = "HWY")
19     public String testMethod(@RequestHeader(name = "user_name") String userName,
20                              @RequestParam(name = "user_age") Integer userAge) {
21 
22         return testService.testMethod(userName, userAge);
23     }
24 }

Les résultats des tests pour deux paramètres de requête différents sont les suivants :

Résultat du retour lorsque le paramètre est correct :

 

  Résultat du retour si le paramètre est incorrect ,Erreur d'interface,Sortie de la console:

 

 

 

 Peut être trouvé en utilisantAOP+ Le formulaire d'annotation personnalisé complète la vérification des permissions de l'interface , Bien sûr, ce n'est qu'une application rudimentaire ,AOP+ Les annotations personnalisées ont encore beaucoup à explorer .

 

版权声明
本文为[Simpleeee]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/09/20210914165931221y.html

Scroll to Top