Zahteve: Projekt mora dinamično spreminjati parametre zahtev, dodeliti vrednosti parametrom zahteve glede na trenutne uporabnikove dovoljenja, preden parametri vstopijo v metodo krmilnika, mora biti dokončana sprememba parametrov zahtev, in ko krmilnik pokliče servisno plast, se parametri zahtevka lahko uporabijo kot pogoji za poizvedovanje in spreminjanje podatkov. Obstajata dva primera zahteve po parametrih:
- Za uporabnike z visokimi privilegiji lahko uporabite dejanske zahtevane vrednosti parametrov
- Za ljudi z le delnimi dovoljenji se vrednosti parametrov zahteve dinamično spreminjajo glede na informacije, vezane na trenutnega uporabnika
Sprva sem želel to implementirati skozi filter, a je bilo preveč nerodno serializirati in deserializirati vsebino zahtev, poleg tega pa je zahtevalo veliko logičnega presojanja in izgube zmogljivosti. Na srečo Spring omogoča funkcionalnost AOP, usmerjeno na obraze, ki jo je mogoče implementirati s preprosto kodo.
Najprej mora projekt maven pom.xml uvesti paket spring-boot-starter-aop, kot sledi:
Ko je paket predstavljen, lahko uporabimo funkcijo AOP, preko@AspectPripomba.
Aspect podpira 5 vrst opomb o obvestilih:
@Before: Predobvestilo, ki se izvede pred izvedbo metode
@After: Po obvestilu, izvedeno po izvedbi metode
@AfterRunning: Vrne obvestilo, ki se izvede po tem, ko metoda vrne rezultat
@AfterThrowing: Obvestilo o izjemi, potem ko metoda vrže izjemo
@Around: Obvestila okoli metode, okoli izvajanja metod
Ustvarite Request.java generični razred ovijalca zahtev:
Ustvarite nov UserInfo.java zahtevajte specifičen razred podatkov:
Če ima trenutna glava zahteve appid, se vrednost parametra zahteve appId spremeni, sicer parameter zahteve ne bo spremenjen, koda je naslednja:
Ustvarite nov krmilnik HomeController in dodajte vmesnik s parametrom zahteve, ki vsebuje Request<UserInfo>, koda pa je naslednja:
V primeru testiranja brez glave zahteve appId je parameter zahteve appId dejanska vrednost in ni bil spremenjen, kot je prikazano na naslednji sliki:
Če poskusite dodati glavo zahteve appId, lahko vidite, da je parameter zahteve appId uspešno spremenjen, kot je prikazano na naslednji sliki:
Na koncu priložite izvorno kodo:Prijava do hiperpovezave je vidna.
|