中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

springboot~攔截器的使用場景

在用(yong)戶登陸之后,我們一(yi)般會把用(yong)戶登陸的(de)(de)狀態(tai)和(he)相關(guan)信(xin)息(xi)進行存(cun)儲,把對(dui)應的(de)(de)token返回(hui)到客戶端進行存(cun)儲,下次請求過來時,系統可以通過token拿(na)到當前這個(ge)用(yong)戶的(de)(de)相關(guan)信(xin)息(xi),這是授權通常的(de)(de)作法,而有(you)時一(yi)些業務里,你存(cun)儲的(de)(de)用(yong)戶信(xin)息(xi)不(bu)是全局的(de)(de),可能(neng)只是某幾個(ge)接口會用(yong)戶某些信(xin)息(xi),而你把它(ta)存(cun)儲起來就不(bu)是很合理(li);并且一(yi)些隱私信(xin)息(xi)持(chi)久化到redis也不(bu)合理(li),這時就需(xu)要統一(yi)對(dui)這種接口的(de)(de)請求做一(yi)起處理(li)了。

攔截器HandlerInterceptor

我(wo)們(men)可以(yi)(yi)去實現(xian)這(zhe)個(ge)(ge)HandlerInterceptor接(jie)口,它會(hui)把(ba)請(qing)(qing)求頁面(mian)前,請(qing)(qing)求頁面(mian)后等方法,我(wo)們(men)可以(yi)(yi)重寫它們(men),把(ba)自己(ji)的(de)邏(luo)輯(ji)加(jia)進(jin)來,比如我(wo)們(men)可以(yi)(yi)在請(qing)(qing)求頁面(mian)前,通過當前登(deng)陸人ID獲(huo)取到當前登(deng)陸人能看的(de)信息ID集(ji)合,并把(ba)這(zhe)些ID集(ji)合以(yi)(yi)參數的(de)形式傳到這(zhe)個(ge)(ge)頁面(mian)里,這(zhe)個(ge)(ge)過程是(shi)在服務端自動(dong)完成的(de),即對某(mou)個(ge)(ge)頁面(mian)(接(jie)口)進(jin)行攔截(jie),添加(jia)自己(ji)的(de)邏(luo)輯(ji)。

/**
 * 當前用戶的數據權限.
 */
@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/**");
    }
}

在對應的頁面(接口)里讀取在攔截器里賦值的對象,就可以進行剩下的工作了。
應用層代碼
通過這個例子我們了解到,對一(yi)些具有統(tong)一(yi)操作的動作,我們可以把它(ta)提取到攔(lan)截器(qi)里(li)去完成。

posted @ 2020-05-28 13:50  張占嶺  閱讀(2168)  評論(0)    收藏  舉報