Vaatimukset: Projektin tulee dynaamisesti muokata pyyntöparametreja, määrittää arvot pyyntöparametreille nykyisen käyttäjän oikeuksien mukaisesti, ennen kuin parametrit siirtyvät ohjainmetodiin, pyyntöparametrien muokkaus on suoritettava, ja kun ohjain kutsuu palvelukerroksen, pyyntöparametreja voidaan käyttää ehtoina datan kyselyyn ja muokkaamiseen. Parametrien pyytämisestä on kaksi tapausta:
- Käyttäjille, joilla on korkeat oikeudet, voit käyttää varsinaisia pyydettyjä parametriarvoja
- Henkilöille, joilla on vain osittaiset oikeudet, pyyntöparametrien arvoja muutetaan dynaamisesti nykyisen käyttäjän sidottua tietoa perusteella
Aluksi halusin toteuttaa sen suodattimen kautta, mutta pyyntösisällön sarjallistaminen ja deserialisointi oli liian hankalaa, ja se vaati myös paljon loogista harkintaa ja suorituskyvyn menetystä. Onneksi Spring tarjoaa AOP-kasvoihin suuntautuvan toiminnallisuuden, joka voidaan toteuttaa yksinkertaisella koodilla.
Ensinnäkin maven-projektin täytyy pom.xml esitellä kevät-boot-starter-aop -paketti seuraavasti:
Kun paketti on julkaistu, voimme käyttää AOP-ominaisuutta@Aspecthuomautus.
Aspect tukee viittä ilmoitusten annotaatiotyyppiä:
@Before: Esiilmoitus, joka suoritetaan ennen metodin suorittamista
@After: Ilmoituksen jälkeen, suoritetaan metodin suorittamisen jälkeen
@AfterRunning: Palauttaa ilmoituksen, joka suoritetaan sen jälkeen, kun metodi palauttaa tuloksen
@AfterThrowing: Poikkeusilmoitus, kun metodi heittää poikkeuksen
@Around: Wraparound-ilmoitukset, metodin suorituksen ympärillä
Luo Request.java yleinen pyyntökääreluokka:
Luo uusi UserInfo.java pyydä spesifinen dataluokka:
Jos nykyisessä pyyntöotsikossa on appid, pyyntöparametrin appId arvoa muutetaan, muuten pyyntöparametria ei muuteta, koodi on seuraava:
Luo uusi HomeController-ohjain ja lisää rajapinta, jossa on pyyntöparametri, joka sisältää <UserInfo>Requestin, koodi on seuraava:
Testauksessa ilman appId-pyyntöotsikkoa pyyntöparametri appId on todellinen arvo eikä sitä ole muutettu, kuten seuraavassa kuvassa on esitetty:
Jos yrität lisätä appId-pyynnön otsikon, näet, että appId-pyyntöparametria on onnistuneesti muokattu, kuten seuraavassa kuvassa näkyy:
Lopuksi liitä lähdekoodi:Hyperlinkin kirjautuminen on näkyvissä.
|