一,單個攔截器,實現接口 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");
}
}
然后順序就變了,日志如下

完了。
