Bazı API'larıma yapılan bazı isteklerde üstbilgileri ve yetkilendirmeyi denetlemesi gereken bazı engelleyiciler var. Örneğin, bazı istekler kullanıcı kimlik doğrulaması gerektirmelidir (örneğin, kullanıcı bilgilerini veritabanından değiştirmek için) ve bazılarında kimlik doğrulama gerektirmez (örneğin, bir kullanıcı oluşturmak için). Ne yazık ki, engelleyicilerin yollarını dışlama yöntemleri, talep yöntemine bağlı değildir.Spring MVC Interceptor, HTTP yöntemindeki yolları hariç tut
Şu anda, doğrulamalardan çıkarılması gereken bir dizi yol ve yöntem dizisi alan bir Util sınıfı oluşturdum. Örneğin: "POST /api/users"
, bir kullanıcı oluşturmak için olduğu için, kimlik doğrulaması önleme cihazım tarafından engellenmemelidir, ancak varolan bir kullanıcıyı değiştirmek için (giriş yapmalıdır) "PUT /api/users"
engellenmelidir. Benim interceptor yapıcısı olarak
public static Boolean skipVerification(HttpServletRequest request, String... skipRequests) {
for (String string : skipRequests) {
String[] split = string.split(" ");
if(split[0].equals(request.getMethod()) && split[1].equals(request.getRequestURI()))
return true;
}
return false;
}
, ben atlanır gereken ekleme isteklerini ve bana ilk yakalanan gerek yoktu olarak istek bunlardan herhangi birini eşleşirse PreHandle yönteminde ben doğru dönün yer.
public AuthenticationHeaderInterceptor(String...skipWhen) {
this.skipWhen = skipWhen;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
if(InterceptorUtils.skipVerification(request, skipWhen))
return true;
///Do Authentication Logic
}
Ben oluşturma ve kullanıcıları düzenlemek için URI değişen bu çözeceği biliyorum ama çok fazla URI'ler ile benim API yığılmayı için tercih ve bu çözmek için daha temiz bir yolu olup olmadığını merak ediyorum.