攔截器的簡介
攔截器(Interceptor)?是Spring框架中的概?念,它同樣適?用于Spring Boot,?因為Spring Boot是基于Spring框架的。攔截器是?一種AOP(面向切面編程)?的輕量級實現方式,它允許我們在請求處理之前、請求處理之后及請求完成視圖渲染完畢后執行一些自定義邏輯。
攔截器的生命周期
攔截器的生命周期主要包含三個關鍵方法:
preHandle:在請求到達Controller之前執行,返回true表示繼續執行后續處理,返回false表示中斷后續處理。通常用于身份驗證和授權、日志記錄等。
postHandle:在Controller執行之后,視圖渲染之前執行。可以對模型數據進行操作或對視圖進行處理。
afterCompletion:在整個請求處理完成并且視圖渲染完畢后執行,通常用于釋放資源或者記錄日志。
攔截器的使用
1、定義攔截器
創建一個類實現HandlerInterceptor接口,并實現preHandle、postHandle和afterCompletion方法
@Slf4j
public class AccessInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 在請求到達Controller之前執行// 可以進行身份驗證和授權、日志記錄等log.info("preHandle:{}", System.currentTimeMillis());return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {// 在Controller執行之后,視圖渲染之前執行// 可以對模型數據進行處理或對視圖進行處理log.info("postHandle:{}", System.currentTimeMillis());}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {// 在整個請求處理完成并且視圖渲染完畢后執行// 可以進行資源的釋放或者記錄日志等log.info("afterCompletion:{}", System.currentTimeMillis());}
}
2、配置攔截器
創建一個配置類實?現WebMvcConfigurer接口?,覆蓋addInterceptors方法,將攔截器注冊到應用程序中
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new AccessInterceptor()).addPathPatterns("/**");}
}
在上述示例中,AccessInterceptor將攔截所有的請求
總結
攔截器主要用于身份驗證和授權、日志記錄、性能檢測、通用行為的處理(如跨域處理、時區信息設置等),通過使用攔截器,我們可以在請求處理的不同階段插入自定義邏輯,增強應用程序的功能和安全性。