我有一些攔截器需要檢查標題和授權,以完成對我的API的某些請求。例如,某些請求應該要求用戶驗證(例如,從數據庫中更改用戶詳細信息),有些請求不需要驗證(例如,創建用戶)。不幸的是,從攔截器中排除路徑的方法不依賴於請求方法。Spring MVC攔截器在HTTP方法中排除路徑
現在我創建了一個Util類,它接收應該從驗證中排除的路徑和方法的字符串數組。例如:"POST /api/users"
不應被我的身份驗證攔截器攔截,因爲它用於創建用戶,但應攔截"PUT /api/users"
,因爲它用於更改現有用戶(應該登錄的用戶)。
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;
}
在我的攔截器的構造,我補充一點,應該被跳過的請求,並在PreHandle方法,如果該請求符合其中任何一個,因爲他們並不需要我在第一攔截我返回true地點。
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
}
我知道改變URI用於創建和編輯用戶將解決這個問題,但我不喜歡我的混亂與API太多的URI,並想知道是否有解決這個一個更清潔的方式。