一张思维导图带你打通SpringBoot自定义拦截器的思路

简介: 一张思维导图带你打通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自定义拦截器的内容到此就结束了。感谢大家的阅读,此文只是打通思路,有关拦截器的具体实战,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。

如果觉得此文对你有用,可以留个关注哟!会持续更新更多优质内容。


目录
相关文章
|
4月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
3月前
|
并行计算 Java 数据处理
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
279 0
|
3月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
268 2
|
23天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
77 14
|
2月前
|
安全 Java 应用服务中间件
如何将Spring Boot应用程序运行到自定义端口
如何将Spring Boot应用程序运行到自定义端口
68 0
|
4月前
|
Java Spring
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
本文介绍了Spring Boot中静态资源的访问位置、如何进行静态资源访问测试、自定义静态资源路径和静态资源请求映射,以及如何处理自定义静态资源映射对index页面访问的影响。提供了两种解决方案:取消自定义静态资源映射或编写Controller来截获index.html的请求并重定向。
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
|
3月前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
91 2
|
3月前
|
前端开发 Java 数据库
springBoot:template engine&自定义一个mvc&后端给前端传数据&增删改查 (三)
本文介绍了如何自定义一个 MVC 框架,包括后端向前端传递数据、前后端代理配置、实现增删改查功能以及分页查询。详细展示了代码示例,从配置文件到控制器、服务层和数据访问层的实现,帮助开发者快速理解和应用。
|
4月前
|
前端开发 Java Spring
springboot自定义拦截器的简单使用和一个小例子
本文介绍了如何在Spring Boot中创建和使用自定义拦截器,通过一个登录验证的示例,演示了拦截器在MVC流程中的preHandle、postHandle和afterCompletion三个环节的作用,并说明了如何在Spring Boot配置类中注册拦截器。
|
5月前
|
Java 数据安全/隐私保护 Spring
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
下一篇
开通oss服务