創建一個類並使其實現接口HandlerInterceptor
接口提供了一個請求的三個週期的攔截方法
在controller之前,返回true則放行,false反之,handler包含處理請求的controller類以及其方法
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
在controller接受請求之後,contorller渲染視圖之前,如果發生異常就不執行了,可對ModelAndView操作
void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
在controller處理全部完成之後,ex參數包含處理期間發生的異常,但僅為未被全局捕獲的異常
void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
public class TheInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion"); } }
編寫完成後需要將其註冊進處理棧中才會生效, 創建WebMvcConfigurer的實現類
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()) // 需要攔截的路徑,默認全部攔截 .addPathPatterns("/test1") // 需要排除的路徑 .excludePathPatterns("/test2"); } }
[niceskyabc ] Spring Boot編寫攔截器教程實例解析已經有230次圍觀