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 .