Reikalavimai: Projektas turi dinamiškai modifikuoti užklausos parametrus, priskirti reikšmes užklausos parametrams pagal dabartinio vartotojo leidimus, prieš parametrams įvedant valdiklio metodą, turi būti baigtas užklausos parametrų modifikavimas, o kai valdiklis iškviečia paslaugų sluoksnį, užklausos parametrai gali būti naudojami kaip sąlygos užklausti ir keisti duomenis. Yra du atvejai, kai prašoma parametrų:
- Vartotojams, turintiems dideles teises, galite naudoti faktines prašomas parametrų reikšmes
- Žmonėms, turintiems tik dalines teises, užklausos parametrų reikšmės dinamiškai modifikuojamos pagal informaciją, susietą su dabartiniu vartotoju
Iš pradžių norėjau jį įgyvendinti per filtrą, tačiau užklausos turinio serializavimas ir deserializavimas buvo per sudėtingas, be to, reikėjo daug loginio sprendimo ir našumo praradimo. Laimei, "Spring" teikia AOP į veidą orientuotą funkciją, kurią galima įgyvendinti naudojant paprastą kodą.
Visų pirma, maven projektas pom.xml turi pristatyti spyruoklės-boot-starter-aop paketą, taip:
Kai paketas bus pristatytas, galime naudoti AOP funkciją per@AspectKomentaras.
"Aspect palaiko 5 tipų pranešimų komentarus:
@Before: Išankstinis pranešimas, kuris vykdomas prieš vykdant metodą
@After: Po pranešimo, vykdomas įvykdžius metodą
@AfterRunning: pateikia pranešimą, kuris vykdomas po to, kai metodas pateikia rezultatą
@AfterThrowing: Pranešimas apie išimtį, po to, kai metodas pateikia išimtį
@Around: Apgaubiantys pranešimai, metodo vykdymas
Sukurkite Request.java bendrąją užklausų apvalkalo klasę:
Sukurkite naują UserInfo.java prašyti konkrečios duomenų klasės:
Jei dabartinė užklausos antraštė turi appid, užklausos parametro appId reikšmė bus pakeista, priešingu atveju užklausos parametras nebus pakeistas, kodas yra toks:
Sukurkite naują "HomeController" valdiklį ir pridėkite sąsają su užklausos parametru, kuriame yra užklausa<UserInfo>, kodas yra toks:
Jei testuojama be "appId" užklausos antraštės, užklausos parametras "appId" yra faktinė vertė ir nebuvo pakeistas, kaip parodyta toliau pateiktame paveikslėlyje.
Jei bandysite pridėti "appId" užklausos antraštę, pamatysite, kad "appId" užklausos parametras buvo sėkmingai pakeistas, kaip parodyta toliau pateiktame paveikslėlyje.
Galiausiai pridėkite šaltinio kodą:Hipersaito prisijungimas matomas.
|