第一步:pom.xml 引入依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.szt</groupId>
<artifactId>interceptordemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>interceptordemo</name>
<description>my Interceptor Demo </description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
需要 引入 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 ================");
}
}
第三步:注册拦截器。创建一个配置类并继承 WebMvcConfigurerAdapter。重写 addInterceptors 方法。
@Configuration
public 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没有走
结果: