一文教你搞懂SpringBoot自定义拦截器的思路
作者:DaenCode
在开发中,都离不开拦截器的使用,比如说在开发登录功能时,实现权限管理功能时等,这篇文章主要带大家使用SpringBoot梳理自定义拦截器的思路,需要的可以参考一下
思维导图
前言
在开发中,都离不开拦截器的使用。比如说在开发登录功能时,采用JWT登录时通过对token进行验证实现登录拦截的功能;实现权限管理功能时,通过对角色权限的拦截实现权限功能。下面带你使用SpringBoot梳理自定义拦截器的思路。
前置知识
@Configuration
:用于标识一个全局配置类。注册到spring容器中,相当于xml配置时的beans标签。@Bean
:用于标识全局配置类中的自定义拦截方法上,进行拦截对象的创建,方便后续注册。
具体实现步骤
定义拦截器类
自定义拦截器类:负责定义拦截的处理逻辑,包含前置拦截、后置拦截和最终拦截。以下是对其API的介绍。
API介绍
在方法参数中,HttpServletRequest代表客户端的请求,HttpServletResponse代表返回给客户端的响应。Object handler是目标处理器(如控制器方法)的实例,ModelAndView用于传递模型数据和视图名称。
方法名 | 方法签名 | 作用 |
---|---|---|
preHandle | boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception | 在目标处理器执行之前被调用。可以进行一些前置处理逻辑,如权限验证、日志记录等。返回值决定请求是否继续执行后续流程,true表示继续执行,false表示中断请求处理 |
postHandle | void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception | 在目标处理器执行之后、视图渲染之前被调用。可以对响应结果进行一些后置处理,如添加公共数据、修改视图等。此时可以对目标处理器的执行结果进行修改 |
afterCompletion | void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception | 在整个请求处理完毕后被调用。可以进行一些清理工作,如资源释放、日志记录等。无法改变响应结果 |
思路:
- 创建拦截器类TestInterceptor并实现HandlerInterceptor。
- 根据其对应的API结合业务,在对应方法上实现相应的处理逻辑。
public class TestInterceptor implements HandlerInterceptor { //前置处理器。进入到Controller层方法之前执行 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //TODO 前置拦截的处理逻辑 //1.判断用户是否登录,登录返回true return HandlerInterceptor.super.preHandle(request, response, handler); } //后置处理器。视图渲染之前执行的方法,对响应结果进行处理。 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { //TODO 后置拦截的处理逻辑 //添加某些数据等等 HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); } //最终处理器。整个请求完成之后执行。 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO 最终拦截处理器 //1.记录日志 HandlerInterceptor.super.afterCompletion(request, response, handler, ex); } }
定义拦截器配置类
拦截器配置类:负责注册相应的拦截器。
思路:
- 创建拦截器配置类。并用@Configuration标识、实现WebMvcConfigurer接口。
- 创建生成拦截器对象的方法。并用@Bean标识。方便拦截器的注册。
- 实现addInterceptors方法,进行拦截器的注册。
@Configuration public class TestInterceptorConfig implements WebMvcConfigurer { @Bean public TestInterceptor testInterceptor(){ return new TestInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(testInterceptor()).addPathPatterns("/test/**"); WebMvcConfigurer.super.addInterceptors(registry); } }
拦截器失效
如果发生拦截器没有生效,可以按照以下思路进行检查:
拦截器配置类是否添加@Configuration。拦截的是接口地址,地址末尾则为/**格式。拦截的是目录地址,地址则为/*/格式。 🌟写在最后
到此这篇关于一文教你搞懂SpringBoot自定义拦截器的思路的文章就介绍到这了,更多相关SpringBoot自定义拦截器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!