Krav: Projektet skal dynamisk ændre anmodningsparametrene, tildele værdier til anmodningsparametrene i henhold til den nuværende brugers tilladelser, før parametrene går ind i controller-metoden, skal ændringen af anmodningsparametrene være færdig, og når controlleren kalder servicelaget, kan anmodningsparametrene bruges som betingelser for forespørgsel og ændring af dataene. Der er to tilfælde af anmoderparametre:
- For brugere med høje privilegier kan du bruge de faktiske ønskede parameterværdier
- For personer med kun delvise tilladelser ændres værdierne af anmodningsparametrene dynamisk baseret på de oplysninger, der er bundet til den aktuelle bruger
I starten ville jeg implementere det gennem et filter, men det var for besværligt at serialisere og deserialisere anmodningsindholdet, og det krævede også meget logisk dømmekraft og tab af ydeevne. Heldigvis tilbyder Spring AOP ansigtsorienteret funktionalitet, som kan implementeres med simpel kode.
Først og fremmest skal Maven-projektet pom.xml introducere spring-boot-starter-aop-pakken, som følger:
Når pakken er introduceret, kan vi bruge AOP-funktionen, gennem@Aspectannotation.
Aspect understøtter 5 typer notifikationsannotationer:
@Before: Forhåndsmeddelelse, som udføres før metoden udføres
@After: Efter notifikation, udført efter metoden er udført
@AfterRunning: Returnerer en notifikation, som udføres efter at metoden returnerer et resultat
@AfterThrowing: Undtagelsesmeddelelse, efter at metoden har kastet en undtagelse
@Around: Wraparound-notifikationer, omkring metodeudførelse
Opret en Request.java generisk request wrapper-klasse:
Opret en ny UserInfo.java anmod specifik dataklasse:
Hvis den aktuelle anmodningsheader har en appid, vil værdien af anmodningsparameteren appId blive ændret, ellers vil anmodningsparameteren ikke blive ændret, koden er som følger:
Opret en ny HomeController-controller og tilføj et interface med en anmodningsparameter, der indeholder Request<UserInfo>, koden er som følger:
I tilfælde af test uden appId-anmodningsheaderen er anmodningsparameteren appId den faktiske værdi og er ikke blevet ændret, som vist i følgende figur:
Hvis du prøver at tilføje appId-anmodningsheaderen, kan du se, at appId-anmodningsparameteren er blevet ændret med succes, som vist i følgende figur:
Endelig vedhæft kildekoden:Hyperlink-login er synlig.
|