本文共 3364 字,大约阅读时间需要 11 分钟。
第一步:pom.xml 引入依赖:
第三步:注册拦截器。创建一个配置类并继承 WebMvcConfigurerAdapter。重写 addInterceptors 方法。需要 引入 spring-webmvc spring-boot-starter-web第二步:创建一个实现 HandlerInterceptor 的类/** * Created by sunzhitao on 2018/6/12. * 1. preHandle 表示方法请求前的处理,若其返回值为FALSE,就中断请求目标方法了,只有返回值为TRUE时才继续执行方法内容。 * 2. postHandle 是在目标方法执行完之后执行的。 */public class WebInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println(" WebInterceptor | preHandle ================"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println(" WebInterceptor | postHandle ================"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println(" WebInterceptor | afterCompletion ================"); }} 4.0.0 com.szt interceptordemo 0.0.1-SNAPSHOT jar interceptordemo my Interceptor Demo org.springframework.boot spring-boot-starter-parent 1.5.8.RELEASE UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-web org.springframework spring-webmvc 4.3.10.RELEASE org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin
@Configurationpublic class WebConfig extends WebMvcConfigurerAdapter { public void addInterceptors(InterceptorRegistry registry){ registry.addInterceptor(new WebInterceptor()).addPathPatterns("/test/**").excludePathPatterns("/exclude/**"); }
第四步:编写普通的controller 和方法。
第三步,TestController 的路径是要走拦截器的,ExcuteController的不走拦截器(排除了)
@RestController@RequestMapping("/test")public class TestController { @RequestMapping("/interceptor") public String interceptor(ModelMap model){ model.addAttribute("a",111); System.out.println("************** TestController | interceptor *******************"); return "interceptor"; }}
@RestController@RequestMapping("/exclude")public class ExcuteController { @RequestMapping("/test") public String excludeTest(){ System.out.println(" ************ ExcuteController | test "); return "exclude"; }}
两个方法都执行一遍,发现TestController里面走了拦截器 ,excludeTest没有走
结果: