註冊攔截器(SpringBoot)

SpringMVC 中提供了AOP風格的攔截器, 擁有更加精細的攔截處理能力。 Spring Boot中攔截器的註冊則更加方便, 步驟:

  • 創建SpringBoot項目, 添加spring-boot-starter-web依賴。
  • 創建攔截器實現HandleInterceptor接口, 代碼如下:
  • /**
     * 全局攔截器
     */
    public class MyInterceptor implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("MyInterceptor>>>preHandle");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("MyInterceptor>>>postHandle");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("MyInterceptor>>>afterCompletion");
        }
    }

    說明: 攔截器中的preHandle -> Controller -> postHandle -> afterCompletion 的順序執行, 注意, 只有preHandle方法返回true時後面的方法纔會執行。當攔截器鏈內存在多個攔截器時, postHandle 在攔截器鏈內的所有攔截器返回時纔會調用, 而afterCompletion 只有preHandle返回true才調用, 但若攔截器鏈內的第一個攔截器的preHandle方法返回false, 則後面的方法不會執行。

  • 配置攔截器。定義配置類進行攔截器的配置, 代碼如下:
  • @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        /**
         * 攔截器配置文件
         * @param registry
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new MyInterceptor())
                    .addPathPatterns("/**")//攔截路徑
                    .excludePathPatterns("/hello")//排除路徑
                    .excludePathPatterns("/*.png");
        }
    }

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章