• SpringBoot中 HandlerInterceptor与HandlerInterceptorAdapter


    SpringBoot中 HandlerInterceptor与HandlerInterceptorAdapter

    • HandlerInterceptor是一个接口

    • HandlerInterceptorAdapter是HandlerInterceptor的抽象实现类

    简介

    SpringWebMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于处理器进行预处理和后处理。

    应用场景
    1、日志记录,可以记录请求信息的日志,以便进行信息监控、信息统计等。
    2、权限检查:如登录检测,进入处理器检测是否登陆,如果没有直接返回到登陆页面。
    3、性能监控:典型的是慢日志。
    4、自定义注解:实现自定义注解的功能。

    HandlerInterceptor

    HandlerInterceptor实现该接口需要同时实现其中三个方法

    public interface HandlerInterceptor {
        default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            return true;
        }
    
        default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        }
    
        default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        }
    }
    

    HandlerInterceptorAdapter

    HandlerInterceptorAdapter继承该接口可以重写其中一个或多个方法。自由度相对来说更高一些。推荐使用

    public abstract class HandlerInterceptorAdapter implements AsyncHandlerInterceptor {
        public HandlerInterceptorAdapter() {
        }
    
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            return true;
        }
    
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        }
    
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        }
    
        public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        }
    }
    
    

    执行顺序

    • preHandler最先执行

    • postHandler随后执行,

    • preHandler返回false不会执行

    • afterCompletion最后执行,即使preHandler返回false也会执行。

    拦截器执行顺序是按照Spring配置文件中定义的顺序而定的。

    2、会先按照顺序执行所有拦截器的preHandle方法,一直遇到return false为止,比如第二个preHandle方法是return false,则第三个以及以后所有拦截器都不会执行。若都是return true,则按顺序加载完preHandle方法。

    3、然后执行主方法(自己的controller接口),若中间抛出异常,则跟return false效果一致,不会继续执行postHandle,只会倒序执行afterCompletion方法。

    4、在主方法执行完业务逻辑(页面还未渲染数据)时,按倒序执行postHandle方法。若第三个拦截器的preHandle方法return false,则会执行第二个和第一个的postHandle方法和afterCompletion(postHandle都执行完才会执行这个,也就是页面渲染完数据后,执行after进行清理工作)方法。(postHandle和afterCompletion都是倒序执行)

  • 相关阅读:
    snmp简介
    PKI简介
    小程序收藏
    mysql数据库中同一DB内倒表指令
    核心层+汇聚层+接入层
    eng
    rmon简介
    几个常用的JavaScript字符串处理函数
    C# 特性(Attribute)学习 关于 .net中[]的解释
    C#操作Excel文件(读取Excel,写入Excel)
  • 原文地址:https://www.cnblogs.com/cuianbing/p/16339672.html
Copyright © 2020-2023  润新知