Követelmények: A projektnek dinamikusan kell módosítania a kérésparamétereket, hogy a jelenlegi felhasználó jogosultságai szerint értékeket rendeljen a kérésparaméterekhez, mielőtt a paraméterek belépnének a vezérlő metódusba, a kérésparaméterek módosítását be kell fejezni, és amikor a vezérlő hívja a szolgáltatási réteget, a kérésparaméterek feltételekként használhatók az adatok lekérdezésére és módosítására. Két eset van, amikor paramétereket kérünk:
- Magas jogosultsággal rendelkező felhasználók esetén a tényleges kért paraméterértékeket használhatják
- Azoknál, akiknek csak részleges jogosultságuk van, a kérésparaméterek értékei dinamikusan változnak a jelenlegi felhasználóhoz kötött információk alapján
Eleinte szűrőn keresztül akartam megvalósítani, de túl nehézkes volt a kérés tartalmát serializálni és deserializálni, ráadásul sok logikai ítélőképesség és teljesítményvesztés is szükséges. Szerencsére a Spring AOP arcorientált funkciókat kínál, amely egyszerű kóddal valósítható meg.
Először is, a maven projektnek pom.xml be kell vezetnie a spring-boot-starter-aop csomagot, az alábbiak szerint:
Miután a csomag bevezetése után használhatjuk az AOP funkciót@AspectMegjegyzés.
Az aspektus 5 típusú értesítési megjegyzéseket támogat:
@Before: Előzetes értesítés, amelyet a metódus végrehajtása előtt végeznek
@After: Értesítés után, a metódus végrehajtása után hajtják végre
@AfterRunning: Értesítést ad vissza, amelyet a metódus eredmény után hajtanak végre
@AfterThrowing: Kivételértesítés, miután a metódus kivételt dob
@Around: Körbefutó értesítések, a metódusvégrehajtás körül
Hozz létre Request.java általános kéréscsomagolós osztályt:
Hozz létre egy új adatosztályt, UserInfo.java kérjen specifikus adatosztályt:
Ha a jelenlegi kérés fejlécében appid van, az appId kérésparaméter értéke változik, különben a kérés paraméter nem változik, a kód a következő:
Hozz létre egy új HomeController vezérlőt, és adj hozzá egy interfészt egy request paraméterrel, amely tartalmazza a <UserInfo>Requestet, a kód a következő:
AppId kérésfejléc nélküli tesztelés esetén az appId kérésparaméter az apId tényleges érték, és nem módosították, ahogy az alábbi ábrán látható:
Ha megpróbálod hozzáadni az appId kérés fejléceit, láthatod, hogy az appId kérésparamétert sikeresen módosították, ahogy az alábbi ábrán látható:
Végül csatoljuk a forráskódot:A hiperlink bejelentkezés látható.
|