Cerințe: Proiectul trebuie să modifice dinamic parametrii cererii, să atribuie valori parametrilor cererii în funcție de permisiunile utilizatorului curent, înainte ca parametrii să intre în metoda controlerului, modificarea parametrilor cererilor trebuie finalizată, iar când controlerul apelează stratul de serviciu, parametrii cererii pot fi folosiți ca condiții pentru a interoga și modifica datele. Există două cazuri de cerere a parametrilor:
- Pentru utilizatorii cu privilegii ridicate, poți folosi valorile parametrilor cerute efectiv
- Pentru persoanele cu permisiuni doar parțiale, valorile parametrilor de cerere sunt modificate dinamic în funcție de informațiile legate de utilizatorul curent
La început, am vrut să-l implementez printr-un filtru, dar era prea greoi să serializez și să deserializez conținutul cererii și a necesitat multă judecată logică și pierdere de performanță. Din fericire, Spring oferă funcționalitate AOP orientată pe față, care poate fi implementată cu cod simplu.
În primul rând, proiectul Maven pom.xml trebuie să introducă pachetul spring-boot-starter-aop, după cum urmează:
Odată ce pachetul este introdus, putem folosi funcția AOP, prin@AspectAdnotare.
Aspect suportă 5 tipuri de adnotări de notificare:
@Before: Pre-notificare, care este executată înainte ca metoda să fie executată
@After: Post-notificare, executată după ce metoda este executată
@AfterRunning: Returnează o notificare, care este executată după ce metoda returnează un rezultat
@AfterThrowing: Notificare de excepție, după ce metoda aruncă o excepție
@Around: Notificări de tip wraparound, în jurul execuției metodei
Creează o Request.java clasă generică de tip wrapper de cerere:
Creează o nouă UserInfo.java solicită o clasă de date specifică:
Dacă antetul cererii curente are un appid, valoarea parametrului de cerere appId va fi modificată, altfel parametrul de cerere nu va fi modificat, codul este următorul:
Creează un nou controler HomeController și adaugă o interfață cu un parametru de cerere care conține Request<UserInfo>, codul fiind următorul:
În cazul testării fără antet de cerere appId, parametrul de cerere appId este valoarea reală și nu a fost modificat, așa cum se arată în figura următoare:
Dacă încerci să adaugi antetul cererii appId, poți vedea că parametrul cererii appId a fost modificat cu succes, așa cum se arată în figura următoare:
În final, atașează codul sursă:Autentificarea cu hyperlink este vizibilă.
|