1、前言
SpringBoo2因为整合了SpringMVC,因此SpringMVC的拦截器也被SpringBoot收入囊中,拦截器(Interceptor)是SpringMVC的核心功能之一,是利用Spring的AOP的面向切面编程的思想,可以很方便的实现对登录权限控制、日志打印等功能。
2、HandlerInterceptor介绍
HandlerInterceptor:处理器拦截器(SpringBoot的web开发中,使用controller来处理web请求,而HandlerInterceptor用来处理controller拦截)
实现HandlerInterceptor接口中三个方法:
preHandle:预先处理方法,返回值为false拦截,true放行,放行之后执行controller对应方法中的内容
postHandle:controller方法返回之后执行postHandle,执行完成之后开始响应页面
afterCompletion:当页面渲染完成之后执行afterCompletion
3、实现
3.1、实现HandlerInterceptor接口
@Component
public class TokenInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("token");
//token 不能为空,写死123 做测试
if(StringUtils.isBlank(token) || !"123".equals(token)){
throw new Exception("token不能为空");
}
return true;
}
}
3.2、加入配置
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TokenInterceptor())
.addPathPatterns("/**")
.order(1);
}
}
4、注意点
- 在注册拦截器的时候 配置拦截路径的addPathPatterns参数为可变长参数,就意味着可以接受String的数组,可以配置多个参数
- 在不做任何设置的时候,多个拦截器的执行顺序和注册的顺序有关,先注册的先执行也可以通过Order方法来设置 执行的顺序 值越小越先执行
总结
本文章配套视频地址
https://www.bilibili.com/video/BV1pt4y1x7nf/
以上教程示例源码
链接:https://pan.baidu.com/s/1qz1Vj4LodnfK40w4D8dQMw
提取码:78m3
如有问题,可以加我公众号进行技术交流
老姚,带你学习先进的分布式技术、架构技术、运维技术,干货满满