第一步: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没有走
结果: