1. 程式人生 > 其它 >Spring Boot 使用攔截器

Spring Boot 使用攔截器

技術標籤:SpringBoot後端spring boot

開發攔截器

自定義一個 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();
    }
}

測試

啟動服務,訪問介面,後臺日誌如下圖,發現攔截器正常執行,並且在過濾器之後