Spring Boot 使用攔截器
阿新 • • 發佈:2020-12-22
開發攔截器
自定義一個 Interceptor
實現 HandlerInterceptor
自定義攔截器的幾個方法:
preHandle
:呼叫Controller某個方法之前
postHandle
:Controller之後呼叫,檢視渲染之前,如果控制器Controller出現了異常,則不會執行此方法
afterCompletion
:不管有沒有異常,這個afterCompletion都會被呼叫,用於資源清理
@Slf4j
public class MyInterceptor implements HandlerInterceptor {
/**
* controller方法呼叫前呼叫。
* @return 往下執行則返回true,否則返回false
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("[{}]執行{}方法!", this.getClass().getSimpleName());
return true;
}
/**
* controller方法呼叫後檢視渲染前執行。
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.info("[{}]執行{}方法!", this.getClass().getSimpleName(), "postHandle" );
}
/**
* controller方法呼叫且檢視渲染完成後執行
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
log.info("[{}]執行{}方法!", this.getClass().getSimpleName(), "afterCompletion");
}
}
配置攔截器
建立配置類實現 WebMvcConfigurer
,重寫 #addInterceptors
方法
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getMyInterceptor())
.addPathPatterns("/**")
// 指定執行順序,數值越小越優先
.order(1);
}
@Bean
public MyInterceptor getMyInterceptor(){
return new MyInterceptor();
}
}
測試
啟動服務,訪問介面,後臺日誌如下圖,發現攔截器正常執行,並且在過濾器之後