Gereksinimler: Proje, istek parametrelerini dinamik olarak değiştirmeli, mevcut kullanıcının izinlerine göre istek parametrelerine değer atamalıdır; parametreler denetleyici yöntemine girmeden önce, istek parametrelerinin değiştirilmesi tamamlanmalıdır ve denetleyici hizmet katmanını çağırdığında, istek parametreleri veriyi sorgulamak ve değiştirmek için koşul olarak kullanılabilir. Parametre talep etme iki durumu vardır:
- Yüksek ayrıcalığa sahip kullanıcılar için, istenen gerçek parametre değerlerini kullanabilirsiniz
- Yalnızca kısmi izinlere sahip kişiler için, istek parametre değerleri mevcut kullanıcıya bağlı bilgiye göre dinamik olarak değiştirilir
Başta bunu bir filtreyle uygulamak istedim ama istek içeriğini serilikten çıkarıp serilikten çıkarmak çok zahmetliydi ve ayrıca çok mantıksal değerlendirme ve performans kaybı gerektiriyordu. Neyse ki, Spring basit kodla uygulanabilen AOP yüz odaklı işlevsellik sağlar.
Öncelikle, maven projesinin pom.xml bahar-boot-starter-aop paketini şu şekilde tanıtması gerekiyor:
Paket tanıtıldığında, AOP özelliğini kullanarak@Aspectek açıklama.
Aspect 5 tür bildirim açıklamasını destekler:
@Before: Yöntem çalıştırılmadan önce yapılan ön bildirim
@After: Bildirim sonrası işlem, yöntem yürütüldükten sonra yürütülen
@AfterRunning: Bir bildirim döndürür, bu bildirim yöntem sonuç verdikten sonra çalıştırılır
@AfterThrowing: İstisna bildirimi, metod bir istisna attıktan sonra
@Around: Yöntem yürütme etrafında wraparound bildirimler
Request.java genel bir istek wrapper sınıfı oluşturun:
Yeni bir UserInfo.java özel veri sınıfı talep edin:
Mevcut istek başlığında appid varsa, istek parametresinin appId değeri değiştirilir, aksi takdirde istek parametresi değiştirilmez, kod şu şekildedir:
Yeni bir HomeController denetleyicisi oluşturun ve Request'i içeren bir talep parametresine sahip bir arayüz ekleyin<UserInfo>; kod şu şekildedir:
appId istek başlığı olmadan yapılan testlerde, istek parametresi appId gerçek değerdir ve aşağıdaki şekilde gösterildiği gibi değiştirilmemiştir:
appId istek başlığını eklemeye çalışırsanız, aşağıdaki şekilde gösterildiği gibi appId isteği parametresinin başarıyla değiştirildiğini görebilirsiniz:
Son olarak, kaynak kodunu ekleyin:Bağlantı girişi görünür.
|