在用戶登陸之后,我們一般會把用戶登陸的狀態和相關資訊進行存盤,把對應的token回傳到客戶端進行存盤,下次請求過來時,系統可以通過token拿到當前這個用戶的相關資訊,這是授權通常的作法,而有時一些業務里,你存盤的用戶資訊不是全域的,可能只是某幾個介面會用戶某些資訊,而你把它存盤起來就不是很合理;并且一些隱私資訊持久化到redis也不合理,這時就需要統一對這種介面的請求做一起處理了,
攔截器HandlerInterceptor
我們可以去實作這個HandlerInterceptor介面,它會把請求頁面前,請求頁面后等方法,我們可以重寫它們,把自己的邏輯加進來,比如我們可以在請求頁面前,通過當前登陸人ID獲取到當前登陸人能看的資訊ID集合,并把這些ID集合以引數的形式傳到這個頁面里,這個程序是在服務端自動完成的,即對某個頁面(介面)進行攔截,添加自己的邏輯,
/**
* 當前用戶的資料權限.
*/
@Slf4j
public class DataPermissionInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.info("DataPermissionInterceptor.init");
//業務邏輯,可能判斷當前登陸人存盤的資料權限型別,然后統一處理,拿到可以訪問的資料編號集合
String[] ids = {"1", "2", "3"};
request.setAttribute("approveIds", StringUtils.join(ids, ","));
return true;
}
}
注冊這個攔截器
/**
* 注冊攔截器
*/
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 自定義攔截器,添加攔截路徑和排除攔截路徑
registry.addInterceptor(new DataPermissionInterceptor()).addPathPatterns("/approve/**");
}
}
在對應的頁面(介面)里讀取在攔截器里賦值的物件,就可以進行剩下的作業了,

通過這個例子我們了解到,對一些具有統一操作的動作,我們可以把它提取到攔截器里去完成,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/178800.html
標籤:Java
上一篇:如何設計一個安全的對外介面?
