Springboot2.x 攔截器


一,單個攔截器,實現接口  HandlerInterceptor

@Component
public class MyInterceptor1 implements HandlerInterceptor {

    /**
     * 進入controller層之前攔截請求
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("============1111111111---preHandle============");
        return true;
    }

    /**
     * 處理請求完成后視圖渲染之前的處理操作
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        System.out.println("============1111111111---postHandle ============");
    }
    /**
     * 視圖渲染之后的操作
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("============1111111111---afterCompletion============");
    }

}

  新建類  InterceptorConfig 實現 WebMvcConfigurer 

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Resource
    private MyInterceptor1 myInterceptor1;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //添加要攔截的url                                攔截的路徑                                    放行的路徑
        registry.addInterceptor(myInterceptor1).addPathPatterns("/admin/**").excludePathPatterns("/admin/login");
    }
}

 

 

二 ,多個攔截器

咱建個攔截器 2

@Component
public class MyInterceptor2 implements HandlerInterceptor {

    /**
     * 進入controller層之前攔截請求
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        System.out.println("============2222222---preHandle============");

        return true;
    }

    /**
     * 處理請求完成后視圖渲染之前的處理操作
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        System.out.println("============2222222---postHandle ============");
    }

    /**
     * 視圖渲染之后的操作
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("============2222222---afterCompletion============");
    }

}

  

然后在 InterceptorConfig 添加配置

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Resource
    private MyInterceptor1 myInterceptor1;
    @Resource
    private MyInterceptor2 myInterceptor2;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //添加要攔截的url               1                 攔截的路徑                                    放行的路徑
        registry.addInterceptor(myInterceptor1).addPathPatterns("/admin/**").excludePathPatterns("/admin/login");
        //添加要攔截的url                2
        registry.addInterceptor(myInterceptor2).addPathPatterns("/admin/**").excludePathPatterns("/admin/login");
    }
}

  現在看看兩個攔截器執行順序

現在把 攔截器1和2的位置換下

 

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Resource
    private MyInterceptor1 myInterceptor1;
    @Resource
    private MyInterceptor2 myInterceptor2;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //添加要攔截的url                2
        registry.addInterceptor(myInterceptor2).addPathPatterns("/admin/**").excludePathPatterns("/admin/login");
        //添加要攔截的url               1                 攔截的路徑                                    放行的路徑
        registry.addInterceptor(myInterceptor1).addPathPatterns("/admin/**").excludePathPatterns("/admin/login");

    }
}

  然后順序就變了,日志如下

完了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM