一文教你搞懂SpringBoot自定義攔截器的思路
思維導圖

前言
在開發(fā)中,都離不開攔截器的使用。比如說在開發(fā)登錄功能時,采用JWT登錄時通過對token進行驗證實現(xiàn)登錄攔截的功能;實現(xiàn)權(quán)限管理功能時,通過對角色權(quán)限的攔截實現(xiàn)權(quán)限功能。下面帶你使用SpringBoot梳理自定義攔截器的思路。
前置知識
@Configuration:用于標識一個全局配置類。注冊到spring容器中,相當于xml配置時的beans標簽。@Bean:用于標識全局配置類中的自定義攔截方法上,進行攔截對象的創(chuàng)建,方便后續(xù)注冊。
具體實現(xiàn)步驟
定義攔截器類
自定義攔截器類:負責定義攔截的處理邏輯,包含前置攔截、后置攔截和最終攔截。以下是對其API的介紹。
API介紹
在方法參數(shù)中,HttpServletRequest代表客戶端的請求,HttpServletResponse代表返回給客戶端的響應(yīng)。Object handler是目標處理器(如控制器方法)的實例,ModelAndView用于傳遞模型數(shù)據(jù)和視圖名稱。
| 方法名 | 方法簽名 | 作用 |
|---|---|---|
| preHandle | boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception | 在目標處理器執(zhí)行之前被調(diào)用??梢赃M行一些前置處理邏輯,如權(quán)限驗證、日志記錄等。返回值決定請求是否繼續(xù)執(zhí)行后續(xù)流程,true表示繼續(xù)執(zhí)行,false表示中斷請求處理 |
| postHandle | void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception | 在目標處理器執(zhí)行之后、視圖渲染之前被調(diào)用??梢詫憫?yīng)結(jié)果進行一些后置處理,如添加公共數(shù)據(jù)、修改視圖等。此時可以對目標處理器的執(zhí)行結(jié)果進行修改 |
| afterCompletion | void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception | 在整個請求處理完畢后被調(diào)用??梢赃M行一些清理工作,如資源釋放、日志記錄等。無法改變響應(yīng)結(jié)果 |
思路:
- 創(chuàng)建攔截器類TestInterceptor并實現(xiàn)HandlerInterceptor。
- 根據(jù)其對應(yīng)的API結(jié)合業(yè)務(wù),在對應(yīng)方法上實現(xiàn)相應(yīng)的處理邏輯。
public class TestInterceptor implements HandlerInterceptor {
//前置處理器。進入到Controller層方法之前執(zhí)行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//TODO 前置攔截的處理邏輯
//1.判斷用戶是否登錄,登錄返回true
return HandlerInterceptor.super.preHandle(request, response, handler);
}
//后置處理器。視圖渲染之前執(zhí)行的方法,對響應(yīng)結(jié)果進行處理。
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//TODO 后置攔截的處理邏輯
//添加某些數(shù)據(jù)等等
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
//最終處理器。整個請求完成之后執(zhí)行。
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// TODO 最終攔截處理器
//1.記錄日志
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}定義攔截器配置類
攔截器配置類:負責注冊相應(yīng)的攔截器。
思路:
- 創(chuàng)建攔截器配置類。并用@Configuration標識、實現(xiàn)WebMvcConfigurer接口。
- 創(chuàng)建生成攔截器對象的方法。并用@Bean標識。方便攔截器的注冊。
- 實現(xiàn)addInterceptors方法,進行攔截器的注冊。
@Configuration
public class TestInterceptorConfig implements WebMvcConfigurer {
@Bean
public TestInterceptor testInterceptor(){
return new TestInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(testInterceptor()).addPathPatterns("/test/**");
WebMvcConfigurer.super.addInterceptors(registry);
}
}攔截器失效
如果發(fā)生攔截器沒有生效,可以按照以下思路進行檢查:
攔截器配置類是否添加@Configuration。攔截的是接口地址,地址末尾則為/**格式。攔截的是目錄地址,地址則為/*/格式。 ??寫在最后
到此這篇關(guān)于一文教你搞懂SpringBoot自定義攔截器的思路的文章就介紹到這了,更多相關(guān)SpringBoot自定義攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
maven 在執(zhí)行package,install,deploy時使用clean與不使用clean的不同之處
有時候用mvn install后,新改的內(nèi)容不生效,一定要后來使用mvn clean install 才生效,由于之前沒有做記錄,以及記不清是什么情況下才會出現(xiàn)的問題,于是想看看clean和不clean的區(qū)別,感興趣的朋友跟隨小編一起看看吧2021-08-08
Spring中的@EnableConfigurationProperties使用方式以及作用詳解
這篇文章主要介紹了Spring中的@EnableConfigurationProperties使用方式以及作用詳解,使用了?@ConfigurationProperties?注解的配置類生效,將該類注入到?IOC?容器中,交由?IOC?容器進行管理,此時則不用再配置類上加上@Component,需要的朋友可以參考下2024-01-01
Springboot中LocalDateTime對象返回給前端格式化解決方案
在項目開發(fā)當中前后端使用什么樣的時間格式,是一個值得關(guān)注的問題,這篇文章主要給大家介紹了關(guān)于Springboot中LocalDateTime對象返回給前端格式化的解決方案,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-04-04

