Anforderungen: Das Projekt muss die Anfrageparameter dynamisch modifizieren, Werte den Anfrageparametern gemäß den Berechtigungen des aktuellen Benutzers zuweisen, bevor die Parameter in die Controller-Methode gelangen, die Änderung der Anfrageparameter abgeschlossen werden muss, und wenn der Controller die Serviceschicht aufruft, können die Anfrageparameter als Bedingungen verwendet werden, um die Daten abzufragen und zu verändern. Es gibt zwei Fälle von angeforderten Parametern:
- Für Nutzer mit hohen Rechten können Sie die tatsächlich gewünschten Parameterwerte verwenden
- Für Personen mit nur teilweisen Berechtigungen werden die Parameter der Anfrage dynamisch angepasst, basierend auf den Informationen, die an den aktuellen Benutzer gebunden sind.
Zunächst wollte ich es durch einen Filter implementieren, aber es war zu umständlich, die Anfrageinhalte zu serialisieren und zu deserialisieren, und es erforderte auch viel logisches Urteilsvermögen und Leistungsverluste. Glücklicherweise bietet Spring eine AOP-gesichtsorientierte Funktionalität, die mit einfachem Code implementiert werden kann.
Zunächst muss das Maven-Projekt pom.xml das spring-boot-starter-aop-Paket wie folgt einführen:
Sobald das Paket eingeführt ist, können wir die AOP-Funktion nutzen, über@AspectAnmerkung.
Aspect unterstützt 5 Arten von Benachrichtigungsannotationen:
@Before: Pre-Benachrichtigung, die vor der Ausführung der Methode ausgeführt wird
@After: Nach der Benachrichtigung, ausgeführt nach Ausführung der Methode
@AfterRunning: Gibt eine Benachrichtigung zurück, die ausgeführt wird, nachdem die Methode ein Ergebnis zurückgegeben hat.
@AfterThrowing: Ausnahmebenachrichtigung, nachdem die Methode eine Ausnahme geworfen hat
@Around: Wraparound-Benachrichtigungen, rund um Methodenausführung
Erstellen Sie eine Request.java generische Request-Wrapper-Klasse:
Erstellen Sie eine neue UserInfo.java Anfrage spezifischer Datenklasse:
Wenn der aktuelle Anforderungskopf eine appid hat, wird der Wert des Anfrageparameters appId geändert, andernfalls wird der Anforderungsparameter nicht geändert, der Code lautet wie folgt:
Erstellen Sie einen neuen HomeController-Controller und fügen Sie eine Schnittstelle mit einem Anfrageparameter hinzu, der Request enthält<UserInfo>; der Code ist wie folgt:
Im Fall eines Tests ohne den appId-Anforderungskopf ist der Anfrageparameter appId der tatsächliche Wert und wurde nicht geändert, wie in der folgenden Abbildung gezeigt:
Wenn Sie versuchen, den appId-Anfrage-Header hinzuzufügen, sehen Sie, dass der appId-Anfrageparameter erfolgreich geändert wurde, wie in der folgenden Abbildung gezeigt:
Zum Schluss fügen Sie den Quellcode an:Der Hyperlink-Login ist sichtbar.
|