拦截器的介绍
Spring Boot 拦截器是 AOP 的一种实现,专门拦截对控制层的请求,主要应用于判断用户权限,拦截webSocket请求。
SpringBoot拦截器
三个方法的介绍:
preHandle: 在controller执行之前要执行的逻辑,这个方法返回boolean值,返回true, 则请求继续执行,返回false则不会向后执行。这个也是拦截器中最常用的方法,一般我们的项目中会校验每个请求的用户信息,根据用户传过来的token来验证其是否合法。如果不合法,直接返回false ,相当于请求会被拒绝。
postHandle: 此方法将在controller执行之后执行,但是视图还没有解析,可向ModelAndView中添加数据(前后端不分离的)
afterCompletion:该方法会在整个请求结束(请求结束,但是并未返回结果给客户端)之后执行, 可获取响应数据及异常信息
@Slf4j
public class IInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 核心业务逻辑,判断是否登录等
String token = request.getHeader("token");
// 判断是否是有长度的字符串
return StringUtils.hasLength(token);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
log.info("controller执行完毕!");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
log.info("请求返回结果:【{}】",request);
}
}
配置拦截器
实现接口和方法里的业务逻辑后,这个拦截器还并没有生效,我们需要将这个拦截器注入到适配器中才能生效,适配器中其实主要就是执行一个添加拦截器的操作,并且为这个拦截器设置要拦截的路径(也可以设置不包含的路径)
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//拦截
registry.addInterceptor(new IInterceptor())
// 对测试接口进行拦截
.addPathPatterns("/**")
// 排除 login请求
.excludePathPatterns("/login");
}
}
测试
此时没有填写token信息,请求结果什么都没有
此时我们勾选token信息,测试结果可以看到接口正常返回请求结果