1、定义拦截器
通过实现接口HandlerInterceptor
,并重写其中方法去定义拦截器,接口内容如下:
public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
return true;
}
default void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, @Nullable ModelAndView modelAndView)
throws Exception {
}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, @Nullable Exception ex
) throws Exception {
}
}
通过选择性地实现接口HandlerInterceptor
中的方法来定义拦截器:
public class FirstInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
System.out.println("执行拦截器[FirstInterceptor], uri: " + request.getRequestURI());
return true;
}
}
public class OtherInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
System.out.println("执行拦截器[OtherInterceptor], uri: " + request.getRequestURI());
return true;
}
}
2、配置拦截器
// WebMvcConfigurationSupport充当了原来的Spring配置文件,所以需要使用@Configuration进行注解
@Configuration
public class MyWebMvcConfiguration extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
// 拦截并处理所有 /intercept/first/ 开头的请求
registry.addInterceptor(new FirstInterceptor())
.addPathPatterns("/intercept/first/**");
// 拦截并处理所有非 /intercept/first/ 开头的请求
registry.addInterceptor(new OtherInterceptor())
.excludePathPatterns("/intercept/first/**");
}
}
3、定义Controller并测试
@RestController
@RequestMapping("/intercept")
public class DemoController {
@GetMapping("/first/demo")
public String firstIntercept() {
return "First Intercept method";
}
@GetMapping("/second/demo")
public String secondIntercept() {
return "Second Intercept method";
}
@GetMapping("/third/demo")
public String thirdIntercept() {
return "Third Intercept method";
}
}
启动项目并测试:
-
addPathPatterns
-
excludePathPatterns