1、写一个拦截器
在Spring MVC
中,拦截器有两种写法:要么实现HandlerInterceptor
接口,要么实现WebRequestInterceptor
接口
而Spring Boot
也只是集成了Spring MVC
而已,所以拦截器的写法还是一样的。不一样的是Spring MVC
的拦截器需要在xml
文件中配置,而Spring Boot
只需要在类上加@Component
注解即可,这样当前拦截器才会被扫描到。
这里只需要实现HandlerInterceptor
接口即可。
/**
* 自定义拦截器
*/
@Component
public class ApiInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("接收到请求");
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("请求响应完成");
}
}
2、配置拦截器到 spring boot 中
配置拦截器有两个方法:一种是实现 WebMvcConfigurer 接口,另一种是继承 WebMvcConfigurationSupport 类
还有一种方法是继承 WebMvcConfigurerAdapter 类,不过这个方法已经过时了
(1)实现 WebMvcConfigurer 接口
/**
* 配置自定义的拦截器
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private ApiInterceptor apiInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(apiInterceptor).addPathPatterns("/api/**")// 拦截的路径
.excludePathPatterns("");// 放过的路径
}
}
(2)继承 WebMvcConfigurationSupport 类
/**
* 配置自定义的拦截器
*/
@Configuration
public class WebConfigEx extends WebMvcConfigurationSupport{
@Autowired
private ApiInterceptor apiInterceptor;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(apiInterceptor).addPathPatterns("/api/**")// 拦截的路径
.excludePathPatterns("");// 放过的路径
super.addInterceptors(registry);
}
}