Krav: Projektet behöver dynamiskt modifiera förfrågningsparametrarna, tilldela värden till förfrågningsparametrarna enligt den nuvarande användarens behörigheter, innan parametrarna går in i kontrollmetoden, måste ändringen av förfrågningsparametrarna slutföras, och när kontrollanten anropar tjänstelagret kan förfrågningsparametrarna användas som villkor för att fråga och ändra datan. Det finns två fall där begärda parametrar efterfrågas:
- För användare med höga privilegier kan du använda de faktiska begärda parametervärdena
- För personer med endast partiella behörigheter modifieras begäransökningsparametrarnas dynamiskt baserat på informationen som är bunden till den aktuella användaren
Till en början ville jag implementera det genom ett filter, men det var för omständligt att serialisera och deserialisera begäran, och det krävde också mycket logiskt omdöme och prestandaförlust. Lyckligtvis erbjuder Spring AOP-funktionalitet som är ansiktsorienterad, vilket kan implementeras med enkel kod.
Först och främst behöver Maven-projektet pom.xml introducera spring-boot-starter-aop-paketet, enligt följande:
När paketet är introducerat kan vi använda AOP-funktionen, genom@Aspectanteckning.
Aspect stöder 5 typer av notifikationsannoteringar:
@Before: Förhandsnotifikation, som utförs innan metoden körs
@After: Efter notifikation, körs efter att metoden körts
@AfterRunning: Returnerar en notifikation, som körs efter att metoden returnerat ett resultat
@AfterThrowing: Undantagsnotifikation, efter att metoden kastat ett undantag
@Around: Wraparound-notiser, kring metodexekvering
Skapa en Request.java generisk request-wrapper-klass:
Skapa en ny UserInfo.java begära specifik dataklass:
Om den aktuella begäransökningshuvudet har en appid kommer värdet på begäranparametern appId att ändras, annars kommer inte begäranparametern att ändras, koden är följande:
Skapa en ny HomeController-kontroller och lägg till ett gränssnitt med en request-parameter som innehåller Request<UserInfo>, koden är följande:
Vid testning utan appId-begärandets huvud är begäranparametern appId det faktiska värdet och har inte ändrats, som visas i följande figur:
Om du försöker lägga till appId-begärandets header kan du se att appId-begäranarparametern har modifierats framgångsrikt, som visas i följande figur:
Slutligen, bifoga källkoden:Inloggningen med hyperlänken är synlig.
|