Springboot-interceptor(攔截器)
阿新 • • 發佈:2019-01-08
第一步: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沒有走
結果: