一文教你搞懂SpringBoot自定义拦截器的思路

 更新时间:2023年08月03日 08:29:28   作者:DaenCode  
在开发中,都离不开拦截器的使用,比如说在开发登录功能时,实现权限管理功能时等,这篇文章主要带大家使用SpringBoot梳理自定义拦截器的思路,需要的可以参考一下

思维导图

前言

在开发中,都离不开拦截器的使用。比如说在开发登录功能时,采用JWT登录时通过对token进行验证实现登录拦截的功能;实现权限管理功能时,通过对角色权限的拦截实现权限功能。下面带你使用SpringBoot梳理自定义拦截器的思路。

前置知识

@Configuration:用于标识一个全局配置类。注册到spring容器中,相当于xml配置时的beans标签。@Bean:用于标识全局配置类中的自定义拦截方法上,进行拦截对象的创建,方便后续注册。

具体实现步骤

定义拦截器类

自定义拦截器类:负责定义拦截的处理逻辑,包含前置拦截、后置拦截和最终拦截。以下是对其API的介绍。

API介绍

在方法参数中,HttpServletRequest代表客户端的请求,HttpServletResponse代表返回给客户端的响应。Object handler是目标处理器(如控制器方法)的实例,ModelAndView用于传递模型数据和视图名称。

方法名方法签名作用
preHandleboolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception在目标处理器执行之前被调用。可以进行一些前置处理逻辑,如权限验证、日志记录等。返回值决定请求是否继续执行后续流程,true表示继续执行,false表示中断请求处理
postHandlevoid postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception目标处理器执行之后、视图渲染之前被调用。可以对响应结果进行一些后置处理,如添加公共数据、修改视图等。此时可以对目标处理器的执行结果进行修改
afterCompletionvoid 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自定义拦截器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring实战之抽象Bean和子Bean定义与用法示例

    Spring实战之抽象Bean和子Bean定义与用法示例

    这篇文章主要介绍了Spring实战之抽象Bean和子Bean定义与用法,结合实例形式分析了Spring抽象Bean和子Bean相关配置、定义与使用操作技巧,需要的朋友可以参考下
    2019-11-11
  • JAVA实现账户取款和存款操作

    JAVA实现账户取款和存款操作

    这篇文章主要介绍了JAVA实现账户取款和存款操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 基于java集合中的一些易混淆的知识点(详解)

    基于java集合中的一些易混淆的知识点(详解)

    下面小编就为大家带来一篇基于java集合中的一些易混淆的知识点(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • Java中接收键盘输入的三种方法

    Java中接收键盘输入的三种方法

    这篇文章主要介绍了Java中接收键盘输入的三种方法,本文给出3个方法实现通过读取控制台的输入与用户实现交互,需要的朋友可以参考下
    2015-06-06
  • Java中4种经典限流算法讲解

    Java中4种经典限流算法讲解

    本文主要介绍了Java中4种经典限流算法讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • java实习--每天打卡十道面试题!

    java实习--每天打卡十道面试题!

    临近秋招,备战暑期实习,祝大家每天进步亿点点!本篇文章准备了十道java的常用面试题,希望能够给大家提供帮助,最后祝大家面试成功,进入自己心仪的大厂
    2021-06-06
  • SpringBoot整合MyBatisPlus配置动态数据源的方法

    SpringBoot整合MyBatisPlus配置动态数据源的方法

    这篇文章主要介绍了SpringBoot整合MyBatisPlus配置动态数据源的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • Java详解HashMap实现原理和源码分析

    Java详解HashMap实现原理和源码分析

    这篇文章主要介绍了Java关于HashMap的实现原理并进行源码分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 详解spring cloud分布式关于熔断器

    详解spring cloud分布式关于熔断器

    这篇文章主要介绍了详解spring cloud分布式关于熔断器,详细的介绍了什么是熔断器和使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • SpringCloud修改Feign日志记录级别过程浅析

    SpringCloud修改Feign日志记录级别过程浅析

    OpenFeign源于Netflix的Feign,是http通信的客户端。屏蔽了网络通信的细节,直接面向接口的方式开发,让开发者感知不到网络通信细节。所有远程调用,都像调用本地方法一样完成
    2023-02-02

最新评论