歡迎您光臨本站 註冊首頁

spring boot攔截器的使用場景示例詳解

←手機掃碼閱讀     niceskyabc @ 2020-06-11 , reply:0

前言

在用戶登陸之後,我們一般會把用戶登陸的狀態和相關信息進行存儲,把對應的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/**");   }  }

 

在對應的頁面(接口)裡讀取在攔截器裡賦值的對象,就可以進行剩下的工作了。

通過這個例子我們瞭解到,對一些具有統一操作的動作,我們可以把它提取到攔截器裡去完成。


[niceskyabc ] spring boot攔截器的使用場景示例詳解已經有239次圍觀

http://coctec.com/docs/java/show-post-238051.html