SpringBoot项目整合拦截器详解

 更新时间:2023年10月21日 11:06:41   作者:浪浪山的猿  
这篇文章主要介绍了SpringBoot项目整合拦截器详解,java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,拦截器用于在某个方法或者字段被访问之前进行拦截,然后再之前或者之后加入某些操作,需要的朋友可以参考下

什么是拦截器

java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。

在AOP中,拦截器用于在某个方法或者字段被访问之前进行拦截,然后再之前或者之后加入某些操作。

拦截器的应用场景

  • 日志记录:可以记录请求信息的日志,以便进行信息监控、信息统计等。
  • 权限检查:如登陆检测,进入处理器检测是否登陆,如果没有直接返回到登陆页面。
  • 性能监控:典型的是慢日志。

拦截器的使用

自定义拦截器的步骤:

  • 自定义拦截器类并实现HandlerInterceptor接口
/**
 * @author gf
 * @date 2023/2/6
 */
@Component
public class Intercepter1 implements HandlerInterceptor {
    @Override
    //在将请求发送到控制器controller之前执行操作,若返回true就进入控制器,若返回false就不进入控制器了
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getHeader("token");
        System.out.println("自定义拦截器1-----拦截到的token值为:"+token);
        return null != token;
    }
 
    @Override
    //用于在将响应发送到客户端之前执行操作,就是控制器执行完之后返回数据时执行。
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        System.out.println("自定义拦截器1-----控制器执行完毕,返回数据");
    }
 
    @Override
    //在完成请求和响应后执行操作
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("自定义拦截器1-----响应结束");
    }
 
}

自定义拦截器类,通过实现HandlerInterceptor接口并重写他的三个方法,preHandle、postHandle、afterCompletion,实现拦截控制。

  • preHandle:在将请求发送到控制器controller之前执行操作,若返回true就进入控制器,若返回false就不进入控制器了。
  • postHandle:用于在将响应发送到客户端之前执行操作,就是控制器执行完之后返回数据时执行。
  • afterCompletion:在完成请求和响应后执行操作。

注册自定义拦截器

拦截器的注册是通过重写WebMvcConfigurer接口的addInterceptors方法实现的,老版本的WebMvcConfigurerAdapter使用时发现已经被淘汰了,不推荐使用了。

/**
 * @author gf
 * @date 2023/2/6
 */
@Configuration
public class InterceptConfig implements WebMvcConfigurer {
 
 
    //引入自定义拦截器对象
    @Resource
    private Intercepter1 Intercepter1;
 
 
    //重写addInterceptors方法注册拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
 
        //addPathPatterns方法添加拦截路径匹配规则("/**"是拦截所有),excludePathPatterns方法是设置白名单,放行哪些路
        registry.addInterceptor(Intercepter1).addPathPatterns("/**").excludePathPatterns("/test/*").order(1);
    }
}

测试效果

编写测试类

    @GetMapping("/test")
    public BaseResponse<String> sayHello(@RequestParam("name") String name){
        if(!name.equals("老王")){
            throw new BaseException(BaseErrorEnum.USER_NOT_EXIST);
        }
        else{
            return RespGenerator.success("调用成功");
        }
    }

测试先不传token

可以看到不传token时,preHandle方法返回false,不在执行后面的方法

测试传token

可以看到传递token后,拦截器放行,执行了后面的方法,

拦截器的优先级

我们重新再增加两个拦截器

设置Order的值

请求接口,查看拦截器的执行顺序

对于order的顺序:拦截器的preHandle方法是根据order的大小从小到大顺序执行,postHandle和afterCompletion方法是根据order的大小从小到大倒叙执行。

拦截器和过滤器的区别

拦截器是spring在基于反射机制实现的,过滤器是基于servlet的回调实现的;

拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑

深度不同:过滤器只在Servlet前后起作用,而拦截器可以深入到方法前后,异常抛出前后等,相比较过滤器具有更大的弹性。

到此这篇关于SpringBoot项目整合拦截器详解的文章就介绍到这了,更多相关SpringBoot整合拦截器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入聊一聊springboot项目全局异常处理那些事儿

    深入聊一聊springboot项目全局异常处理那些事儿

    最近在做项目时需要对异常进行全局统一处理,所以下面这篇文章主要给大家介绍了关于springboot项目全局异常处理那些事儿,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • SpringBoot实现excel生成并且通过邮件发送的步骤详解

    SpringBoot实现excel生成并且通过邮件发送的步骤详解

    实际开发中,特别是在B端产品的开发中,我们经常会遇到导出excel的功能,更进阶一点的需要我们定期生成统计报表,然后通过邮箱发送给指定的人员, 今天要带大家来实现的就是excel生成并通过邮件发送,需要的朋友可以参考下
    2023-10-10
  • 了解java中的Clojure如何抽象并发性和共享状态

    了解java中的Clojure如何抽象并发性和共享状态

    Clojure是一种运行在Java平台上的 Lisp 方言,Lisp是一种以表达性和功能强大著称的编程语言,但人们通常认为它不太适合应用于一般情况,而Clojure的出现彻底改变了这一现状。,需要的朋友可以参考下
    2019-06-06
  • IDEA类存在但找不到的解决办法

    IDEA类存在但找不到的解决办法

    本文主要介绍了IDEA类存在但找不到的解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Java随机生成手机短信验证码的方法

    Java随机生成手机短信验证码的方法

    这篇文章主要介绍了Java随机生成手机短信验证码的方法,涉及Java数学运算计算随机数及字符串操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • 浅谈几种Java自定义异常处理方式

    浅谈几种Java自定义异常处理方式

    在Java中,异常是一种常见的处理机制,本文主要介绍了浅谈几种Java自定义异常处理方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • 基于Java实现图形验证码工具类

    基于Java实现图形验证码工具类

    这篇文章主要为大家详细介绍了如何基于Java实现图形验证码工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • Java中常用队列的使用解读

    Java中常用队列的使用解读

    这篇文章主要介绍了Java中常用队列的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • spring-boot中的SPI机制实例讲解

    spring-boot中的SPI机制实例讲解

    这篇文章主要介绍了spring-boot中的SPI机制实例讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java完美实现2048小游戏

    Java完美实现2048小游戏

    本文给大家分享的是一则根据网友的代码改编的2048小游戏的源码,个人认为已经非常完美了,推荐给大家,有需要的小伙伴可以参考下。
    2015-03-03

最新评论