当前位置: 首页 > news >正文

拦截器Interceptor

拦截器Interceptor

拦截器是Spring框架中提供的用来动态拦截方法调用的机制,主要是在指定方法调用的前后根据业务需要执行预先定义的代码。

在这里插入图片描述

拦截器的快速入门

1). 自定义拦截器

创建HandlerInterceptor接口的实现类,并重写其方法。

在这里插入图片描述

  • HandlerInterceptor
public interface HandlerInterceptor {//目标方法执行前执行//通过返回值决定是否放行 true:放行   false:不放行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 {}}

我们可以根据业务需要重写需要的方法达到在指定方法的前后执行预设代码的逻辑。

  • 自定义拦截器 (HandlerInterceptor的实现类)
@Component
public class DemoInterceptor implements HandlerInterceptor {//访问资源前执行 // 通过返回值控制是否访问目标资源 true:放行  false: 不放行@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {log.info("目标方法执行前执行,preHandle...");return true;// true: 放行}//访问资源后执行@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {log.info("目标方法执行后执行,,postHandle...");}//视图渲染后执行@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {log.info("视图渲染完后执行,afterCompletion...");}
}

2). 注册配置拦截器

创建WebMvcConfigurer的实现类,并重写addIinterceptors方法。(别忘了将配置类交由IOC容器进行管理)

@Configuration//配置类交由IOC管理
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate DemoInterceptor demoInterceptor;//自定义拦截器//重写addInterceptors@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(demoInterceptor)//注册自定义拦截器.addPathPatterns("/**");//通过链式编程指定拦截路径}
}

向服务器发送请求访问资源,控制台日志输出如下:

  • preHandle 中返回true,目标方法执行

在这里插入图片描述

  • preHandle 中返回false,目标方法不执行

在这里插入图片描述

addPathPatterns() 中的拦截路径

需要与过滤器的urlPatterns不同的是,拦截器中/*仅表示一级路径。

拦截路径含义
/*匹配任意一级路径
/**任意级路径
/path/*匹配/path下的一级路径
/path/**匹配/path下的任意级路径

注意:

当定义多个拦截器时,多个拦截器的执行顺序如何?

默认情况下,拦截器的执行顺序取决于其在配置类中addInterceptor方法调用的顺序。此外,我们还可以使用@Order注解为拦截器指定优先级。数值越小,优先级越高,从而确保拦截器按预期顺序执行。

过滤器Filter和拦截器Interceptor的执行流程

  1. 浏览器的请求访问web服务器的资源时,此时过滤器会先拦截到该请求,只有拦截器放行后才会进入到Spring的环境中,然后交由DispatcherServlet(前端控制器)。
  2. 再由DispatcherServlet(前端控制器)将请求发往拦截器,拦截器在拦截请求后,执行preHandle()方法,只有该方法放行后才会访问对应的资源。
  3. 在请求到达请求资源(Controller)执行完毕后,再回来执行postHandle()agterCompletion(),最后返回DispatcherServlet,并最终执行过滤器放行后逻辑将数据相应给浏览器。

在这里插入图片描述

http://www.dtcms.com/a/438758.html

相关文章:

  • 运营网站流程ui设计的定义
  • 可以做自己的单机网站网站客户案例的
  • 网络编程中UDP协议的广播和组播通信
  • STM32G474单片机开发入门(一)STM32G474RET6单片机详解
  • W3C 简介
  • 菲律宾宿务Cebu(宿雾)介绍
  • Python中如何实现多级缓存
  • 深入掌握 FluentMigrator:C#.NET 数据库迁移框架详解
  • 快速做网站套餐光谷网站建设哪家好
  • 基本定时器(TIM6、TIM7)的基本介绍
  • 荆州网站建设兼职旅游网站功能简介
  • 有关做美食的网站android源码下载网站
  • Ubuntu中部署docker教程及使用指南(易用版)
  • c++之基础A(系统函数)(第一课)
  • 使用scrollview 时,自动滚动条和视图大于子view时居中显示
  • 如何最小阻力练习软件测试相关的英语口语
  • 专门做视频点评的网站iis 新建网站没有文件夹权限
  • 【完整源码+数据集+部署教程】 小麦病害分割系统: yolov8-seg-dyhead
  • Java 黑马程序员学习笔记(进阶篇16)
  • 自适应网站功能网站开发开发的前景
  • 整套网站设计网络服务费
  • python autocad comtypes+pyautocad二次开发 pywin32连不上高版本cad解决办法
  • Linux——0:安装与配置、命令、gcc
  • 健康管理实训室:创新教学场景,推动健康管理人才实战能力提升
  • 网站建设设计模板工业设计 做自己的网站 知乎
  • CAN-FIFO 确认处理(FIFO Acknowledge Handling)
  • Java--多线程知识(四)
  • 浅谈内存DDR——DDR4的RASR/Bank Group等技术
  • 网站上传模板后xml天气预报网站怎么做
  • 人工智能:从技术本质到未来图景,一场正在重塑世界的变革