Krav: Prosjektet må dynamisk endre forespørselsparametrene, tildele verdier til forespørselsparameterne i henhold til den nåværende brukerens tillatelser, før parameterne går inn i kontrollermetoden, må endringen av forespørselsparameterne fullføres, og når kontrolleren kaller tjenestelaget, kan forespørselsparametrene brukes som betingelser for å spørre og endre dataene. Det finnes to tilfeller av forespørrende parametere:
- For brukere med høye rettigheter kan du bruke de faktiske forespurte parameterverdiene
- For personer med kun delvise tillatelser endres forespørslingsparameterverdiene dynamisk basert på informasjonen som er bundet til den nåværende brukeren
Først ønsket jeg å implementere det gjennom et filter, men det var for tungvint å serialisere og deserialisere forespørselsinnholdet, og det krevde også mye logisk vurdering og ytelsestap. Heldigvis tilbyr Spring AOP ansiktsorientert funksjonalitet, som kan implementeres med enkel kode.
Først og fremst må Maven-prosjektet pom.xml introdusere spring-boot-starter-aop-pakken, som følger:
Når pakken er introdusert, kan vi bruke AOP-funksjonen, gjennom@Aspectmerknad.
Aspect støtter 5 typer varslingsannotasjoner:
@Before: Forhåndsvarsling, som utføres før metoden utføres
@After: Etter varsling, utført etter at metoden er utført
@AfterRunning: Returnerer et varsel, som utføres etter at metoden returnerer et resultat
@AfterThrowing: Unntaksvarsel, etter at metoden kaster et unntak
@Around: Wraparound-varsler, rundt metodeutførelse
Lag en Request.java generisk forespørselspakkeklasse:
Opprett en ny UserInfo.java be om spesifikk dataklasse:
Hvis den nåværende forespørselsheaderen har en appid, vil verdien av forespørselsparameteren appId bli endret, ellers vil ikke forespørselsparameteren bli endret, koden er som følger:
Opprett en ny HomeController-kontroller og legg til et grensesnitt med en forespørselsparameter som inneholder Request<UserInfo>, koden er som følger:
I tilfelle testing uten appId-forespørselshodet, er forespørselsparameteren appId den faktiske verdien og har ikke blitt endret, som vist i følgende figur:
Hvis du prøver å legge til appId-forespørselshodet, kan du se at appId-forespørselsparameteren har blitt endret med suksess, som vist i følgende figur:
Til slutt, legg ved kildekoden:Innloggingen med hyperkoblingen er synlig.
|