1. 介绍
1.1 简介
Spring 中的拦截器主要有两种:
一种是 HandlerInterceptor
这是对请求地址的拦截。
另一种是 MethodInterceptor
这是对方法的拦截。
本文章主要是对 HandlerInterceptor
做出的一些的理解说明。
1.2 实现逻辑
实现拦截器主要有这几步:
- 实现
HandlerInterceptor
接口; - 创建一个配置类,继承
WebMvcConfigurer
或者WebMvcConfigurationSupport
; - 加载拦截器;
2. 具体实现
2.1 实现 HandlerInterceptor
接口
新建一个 DemoInterceptor
类, 实现 HandlerInterceptor
接口
/**
* @Description 新建一个 DemoInterceptor 类, 实现 HandlerInterceptor 接口
* @Date 2022年10月24日$ 00:18:29$
**/
public class DemoInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("this is preHandler....,控制器方法执行前执行。");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("this is postHandler....,控制器方法执行后执行");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("this is afterCompletion...,视图渲染完成后执行,即数据返回前端后执行");
}
}
2.2 实现 WebMvcConfigurer
接口
新建一个配置类,实现 WebMvcConfigurer
接口,将拦截器注册到 Spring MVC 中。
/**
* @Description 新建一个配置类,继承 WebMvcConfigurer
* @Date 2022年10月24日$ 00:23:19$
**/
@Configuration
public class DemoConfig implements WebMvcConfigurer {
/**
* 将拦截器注入到 Bean 中
*
* @return
*/
@Bean
public DemoInterceptor demoInterceptor() {
return new DemoInterceptor();
}
/**
* 注册加载拦截器
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(demoInterceptor())
.addPathPatterns("/**");
}
}
2.3 写一个 Controller
方法进行测试
/**
* @Description 控制器
* @Date 2022年10月24日$ 00:26:59$
**/
@RestController
@RequestMapping("/demo")
public class DemoController {
@GetMapping("/hello")
public String hello() {
System.out.println("这是控制器中的 hello 方法");
return "hello";
}
@GetMapping("/test")
public String test() {
System.out.println("这是控制器中的 test 方法");
return "test";
}
}
2.4 调用此接口进行测试
访问路径:localhost:8080/demo/hello
控制台输出: