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

Simpleeee 2021-09-15 06:44:30
rification des permissions interface pour


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://javamana.com/2021/09/20210914165931221y.html

  1. 入职3个月的Java程序员面临转正,字节跳动 京东 360 网易面试题整理,
  2. Lancement de l'ensemble du réseau, je fais l'expérience réelle de l'externalisation Java à Huawei!
  3. 全套Java視頻百度雲,終於找到一個看得懂的JVM內存模型了,
  4. Un ensemble complet de vidéos Java Baidu Cloud a finalement trouvé un modèle de mémoire JVM compréhensible.
  5. Déployez le projet Spring Boot avec docker, et parlez de la bonne posture pour que les programmeurs grandissent.
  6. 关于网络优化你必须要知道的重点,GC 堆排 Tomcat 算法题,
  7. 关于电商秒杀系统中防超卖处理方案简述,Java开发热门前沿知识,
  8. Les programmeurs Java qui sont entrés dans l'entreprise pendant trois mois ont dû faire face à une correction d'échelle, et les octets ont sauté dans le traitement des questions d'entrevue de JD 360 Netease.
  9. What is the new syntax of XX ≠ null in Java?
  10. Spring scheduled task cron expression (@ scheduled)
  11. Une brève description du plan de traitement anti - surproduction dans le système d'arrêt du commerce électronique et les connaissances de pointe du développement Java.
  12. Ce que vous devez savoir sur l'optimisation du réseau, c'est que le problème de l'algorithme Tomcat de gerbage GC,
  13. 凭借这份Java面试题集,成体系化的神级Java进阶笔记,
  14. 凭借这份Java面试题集,BAT大厂面试基础题集合,
  15. Docker Knowledge point collation
  16. Redis sur la réalisation élégante des tâches retardées
  17. 憑借這份Java面試題集,BAT大廠面試基礎題集合,
  18. Avec cet ensemble de questions d'entrevue Java, l'ensemble de questions de base d'entrevue de bat,
  19. Avec cet ensemble de questions d'entrevue Java, les notes avancées Java de niveau divin sont systématisées,
  20. Opérateurs arithmétiques et opérateurs de comparaison pour JavaScript, Introduction classique au développement web
  21. MySQL + +: slow query log analysis (I)
  22. Android Architect path 21 Responsive Programming RX Java thread transformation Principles
  23. Explorer le cadre open source Android - 1. Okhttp Source Analysis
  24. 分布式宝典:限流 缓存 通讯,Java开发中常见的一些问题面试专题,
  25. 分享面试经历的网站,腾讯大牛教你自己写Java框架!
  26. Expliquer les six principes de base du modèle de conception par des exemples réels
  27. Site Web pour partager vos expériences d'entrevue, Tencent Bull vous apprend à écrire votre propre cadre Java!
  28. Dictionnaire distribué: communication de cache limitée par le courant, sujets d'entrevue pour certaines questions courantes dans le développement Java,
  29. Another uncle circle man is angry! The high-quality acting skills make people admire and achieve the highlight of the ending of spring in Jade House
  30. 10. MySQL database import, export and authorization
  31. 9. MySQL data query
  32. 8. MySQL data operation DML
  33. 7. MySQL database table engine and character set
  34. 分享面試經曆的網站,騰訊大牛教你自己寫Java框架!
  35. Les points de connaissance de Java Real - time Video Download, Byte Jumping Java R & D post ont été divulgués à l'intérieur.
  36. Introduction au JavaScript chapitre 15 (objets, clairvoyance)
  37. 前方高能,Java程序员最大的悲哀是什么?
  38. 别再说你不会JVM性能监控和调优了,2021华为Java高级面试题及答案,
  39. Tencent private cloud MySQL solution tdsql
  40. 前方高能,Java程序員最大的悲哀是什麼?
  41. Quelle est la plus grande tristesse des programmeurs Java à l'avenir?
  42. 15 useful cron work examples commonly used by Senior Linux system administrators
  43. Ne dites pas que vous ne pouvez pas surveiller et ajuster les performances JVM, 2021 Huawei Java Advanced interview Questions and Answers,
  44. 別再說你不會JVM性能監控和調優了,2021華為Java高級面試題及答案,
  45. 十多家大厂Java面试真题锦集干货整理,Java开发者该学习哪些东西提高竞争力?
  46. 十分钟带你回顾Spring常问的知识点,35岁老年程序员的绝地翻身之路,
  47. 区区一个SpringBoot问题就被干趴下了,看完这一篇就够了!
  48. K8s gestion des ressources (opérations de base)
  49. Java and cloud native dating
  50. 區區一個SpringBoot問題就被幹趴下了,看完這一篇就够了!
  51. Un problème de démarrage de printemps dans le district a été séché, et c'est assez!
  52. Dix minutes pour vous faire passer en revue les points de connaissance que Spring demande souvent, le chemin du retour Jedi d'un programmeur âgé de 35 ans,
  53. Plus d'une douzaine de grandes usines Java interview vrai sujet brocade collection de marchandises sèches, les développeurs Java devraient apprendre ce qui améliore la compétitivité?
  54. 十分鐘帶你回顧Spring常問的知識點,35歲老年程序員的絕地翻身之路,
  55. Guide de route d'apprentissage Java, redis a plusieurs types de données?
  56. 华为Java高级工程师面试题,字节跳动上千道精选面试题还不刷起来!
  57. 华为Java面试题目,腾讯Java开发面试记录,
  58. Propriétés et méthodes des objets Array en javascript!,Pseudo - classes et pseudo - éléments pour CSS
  59. 華為Java面試題目,騰訊Java開發面試記錄,
  60. Huawei Java interview title, Tencent Java Development interview record,