Изисквания: Проектът трябва динамично да модифицира параметрите на заявката, да присвоява стойности на параметрите на заявката според разрешенията на текущия потребител, преди параметрите да влязат в метода на контролера, трябва да бъде завършена промяната на параметрите на заявката, а когато контролерът извика слоя на услугата, параметрите на заявката могат да се използват като условия за запитване и промяна на данните. Има два случая на заявяване на параметри:
- За потребители с високи права можете да използвате реалните стойности на параметъра, които са поискани
- За хора с частични права, стойностите на параметрите на заявката се променят динамично според информацията, свързана с текущия потребител
Първоначално исках да го реализирам чрез филтър, но беше твърде тромаво да сериализирам и десериализирам съдържанието на заявките, а също така изискваше много логическо преценяване и загуба на производителност. За щастие, Spring предоставя функционалност, ориентирана към лице, ориентирана към AOP, която може да се реализира с прост код.
Първо, проектът Maven pom.xml трябва да въведе пакета spring-boot-starter-aop, както следва:
След въвеждането на пакета можем да използваме функцията AOP, чрез@Aspectанотация.
Aspect поддържа 5 вида анотации за известия:
@Before: Предварително известие, което се изпълнява преди изпълнението на метода
@After: След известие, изпълнявано след изпълнението на метода
@AfterRunning: Връща известие, което се изпълнява след като методът връща резултат
@AfterThrowing: Известие за изключение, след като методът издаде изключение
@Around: Обгръщащи известия, свързани с изпълнението на метода
Създайте Request.java генеричен обвивка на заявка:
Създайте нов UserInfo.java заявка за специфичен клас данни:
Ако текущият заглавен елемент на заявката има appid, стойността на параметъра appId ще бъде променена, в противен случай параметърът на заявката няма да бъде променян, кодът е следният:
Създайте нов контролер за HomeController и добавете интерфейс с параметър за заявка, съдържащ Request<UserInfo>, кодът е следният:
В случай на тестване без заглавието на заявката appId, параметърът appId е действителната стойност и не е бил променян, както е показано на следващата фигура:
Ако опитате да добавите заглавие за заявка appId, ще видите, че параметърът appId е успешно променен, както е показано на следната фигура:
Накрая, прикачете изходния код:Входът към хиперлинк е видим.
|