妙用“SpringBoot”拦截器,让你一个人开发整个系统的鉴权模块!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了妙用“SpringBoot”拦截器,让你一个人开发整个系统的鉴权模块!相关的知识,希望对你有一定的参考价值。
参考技术A HandlerInterceptor 允许定制 handler 处理器执行链的工作流接口。我们可以自定义拦截器用于拦截 handlers 处理器(你可以理解为 controller 层的接口),从而可以添加一些共同的重复性的处理行为(例如接口鉴权,接口日志记录,性能监控等),而不用修改每一个 handler 的实现。注意,此基于 SpringBoot 2.3.12.RELEASE 版本讲解。
HandlerInterceptor 接口只有三个默认空实现方法,在低版本中这三个方法不是默认方法,而是抽象方法。
这三个方法的执行顺序图如下:
preHandle 前置处理,拦截一个处理器(handler)的执行,preHandle 方法会在 HandlerMapping 确定一个适当的处理器对象之后,但在 HandlerAdapter 调用处理器之前被调用。可以简单理解为 controller 接口被调用之前执行。
Intercepter 是链式的,就是一个接着一个执行。如果此方法返回 true,则会执行下一个拦截器或者直接执行处理器。如果此方法返回 false 或者抛出异常则终止执行链,也不再调用处理器。
注意,此方法如果不返回 true,那么 postHandle 和 afterCompletion 不会被执行。
那这个方法有什么用呢?其实可以做一些接口被调用前的预处理,例如用户权限校验。
postHandle 后置处理,会在 HandlerAdapter 调用处理器之后,但在 DispatcherServlet 渲染视图之前被调用。可以在此对 ModelAndView 做一些额外的处理。可以简单理解为 controller 接口被调用之后执行。
注意,此方法在执行链中的执行顺序是倒着执行的,即先声明的拦截器后执行。
afterCompletion 完成之后,在请求处理完之后被执行,也就是渲染完视图之后。一般用于做一些资源的清理工作,配合 preHandle 计算接口执行时间等。
注意,和 postHandle 一样,此方法在执行链中的执行顺序也是倒着执行的,即先声明的拦截器后执行。
注意,我们自定义的拦截器要通过 WebMvcConfigurer 的实现类进行注册,才能生效。
以上是关于妙用“SpringBoot”拦截器,让你一个人开发整个系统的鉴权模块!的主要内容,如果未能解决你的问题,请参考以下文章
传统@ServerEndpoint方式开发WebSocket应用和SpringBoot构建WebSocket应用程序
三大免费开源的php语言cms系统 用好它们让你一天建好一个网站