Nõuded: Projekt peab dünaamiliselt muutma päringuparameetreid, määrama päringuparameetritele väärtused vastavalt praeguse kasutaja õigustele, enne kui parameetrid sisenevad kontrolleri meetodi, tuleb taotlusparameetrite muutmine lõpetada ning kui kontroller kutsub teenusekihti, saab päringuparameetreid kasutada tingimustena andmete pärimiseks ja muutmiseks. Parameetrite taotlemiseks on kaks juhtumit:
- Kõrgete privileegidega kasutajatele saab kasutada tegelikke soovitud parameetri väärtusi
- Inimestel, kellel on ainult osalised õigused, muudetakse päringuparameetrite väärtusi dünaamiliselt vastavalt praegusele kasutajale seotud infole
Alguses tahtsin selle rakendada filtri kaudu, kuid see oli liiga kohmakas järjestada ja deserialiseerida päringu sisu ning nõudis ka palju loogilist otsustusvõimet ja jõudluse kaotust. Õnneks pakub Spring AOP näopõhist funktsionaalsust, mida saab rakendada lihtsa koodiga.
Esiteks peab maven projekt pom.xml tutvustama spring-boot-starter-aop paketti järgmiselt:
Kui pakett on kasutusele võetud, saame kasutada AOP funktsiooni läbi@AspectAnnotatsioon.
Aspekt toetab 5 tüüpi teavituste annotatsioone:
@Before: Eelteade, mis käivitatakse enne meetodi käivitamist
@After: Pärast teavitust, täidetakse pärast meetodi käivitamist
@AfterRunning: Tagastab teavituse, mis täidetakse pärast seda, kui meetod tagastab tulemuse
@AfterThrowing: Eranditeavitus pärast seda, kui meetod viskab erandi
@Around: Ümbritsevad teavitused, meetodi täitmise ümber
Loo Request.java üldine päringute wrapperi klass:
Loo uus UserInfo.java taotle spetsiifilist andmeklassi:
Kui praegusel päringupäisel on appid, muudetakse taotlusparameetri appId väärtust, vastasel juhul taotlusparameetrit ei muudeta, kood on järgmine:
Loo uus HomeControlleri kontroller ja lisa liides päringuparameetriga, mis sisaldab <UserInfo>Requesti, kood on järgmine:
Kui testitakse ilma appId päringupäiseta, on päringuparameeter appId tegelik väärtus ja seda ei ole muudetud, nagu näidatud järgmine joonis:
Kui proovite lisada appId päringu päist, näete, et appId päringu parameeter on edukalt muudetud, nagu näidatud järgmisel joonisel:
Lõpuks lisa lähtekood:Hüperlingi sisselogimine on nähtav.
|