电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

SpringBoot 攔截器妙用你真的了解嗎

瀏覽:49日期:2023-02-28 10:31:14
HandlerInterceptor 詳解

HandlerInterceptor 允許定制 handler 處理器執行鏈的工作流接口。我們可以自定義攔截器用于攔截 handlers 處理器(你可以理解為 controller 層的接口),從而可以添加一些共同的重復性的處理行為(例如接口鑒權,接口日志記錄,性能監控等),而不用修改每一個 handler 的實現。

注意,此基于 SpringBoot 2.3.12.RELEASE 版本講解。

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 {}}

這三個方法的執行順序圖如下:

SpringBoot 攔截器妙用你真的了解嗎

preHandle

preHandle 前置處理,攔截一個處理器(handler)的執行,preHandle 方法會在 HandlerMapping 確定一個適當的處理器對象之后,但在 HandlerAdapter 調用處理器之前被調用。可以簡單理解為 controller 接口被調用之前執行。

Intercepter 是鏈式的,就是一個接著一個執行。如果此方法返回 true,則會執行下一個攔截器或者直接執行處理器。如果此方法返回 false 或者拋出異常則終止執行鏈,也不再調用處理器。

注意,此方法如果不返回 true,那么 postHandle 和 afterCompletion 不會被執行。

那這個方法有什么用呢?其實可以做一些接口被調用前的預處理,例如用戶權限校驗。

package com.chenpi;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.lang.Nullable;import org.springframework.stereotype.Component;import org.springframework.web.method.HandlerMethod;import org.springframework.web.servlet.HandlerInterceptor;/** * @Description 用戶權限驗證攔截 * @Author 陳皮 * @Date 2021/6/27 * @Version 1.0 */@Componentpublic class UserPermissionInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {if (handler instanceof HandlerMethod) { HandlerMethod handlerMethod = (HandlerMethod) handler; // 獲取用戶權限校驗注解 UserAuthenticate userAuthenticate = handlerMethod.getMethod().getAnnotation(UserAuthenticate.class); if (null == userAuthenticate) {userAuthenticate = handlerMethod.getMethod().getDeclaringClass().getAnnotation(UserAuthenticate.class); } if (userAuthenticate != null && userAuthenticate.permission()) {// 驗證用戶信息UserContext userContext = userContextManager.getUserContext(request);if (null == userContext) { return false;} }}return true; }}postHandle

postHandle 后置處理,會在 HandlerAdapter 調用處理器之后,但在 DispatcherServlet 渲染視圖之前被調用。可以在此對 ModelAndView 做一些額外的處理。可以簡單理解為 controller 接口被調用之后執行。

注意,此方法在執行鏈中的執行順序是倒著執行的,即先聲明的攔截器后執行。

afterCompletion

afterCompletion 完成之后,在請求處理完之后被執行,也就是渲染完視圖之后。一般用于做一些資源的清理工作,配合 preHandle 計算接口執行時間等。

注意,和 postHandle 一樣,此方法在執行鏈中的執行順序也是倒著執行的,即先聲明的攔截器后執行。

@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) { // 請求完后,清除當前線程的用戶信息 UserContextHolder.removeUserContext();}注冊攔截器

注意,我們自定義的攔截器要通過 WebMvcConfigurer 的實現類進行注冊,才能生效。

package com.yzj.ehr.common.config;import com.yzj.ehr.common.context.UserContextResolver;import org.springframework.stereotype.Component;import org.springframework.web.method.support.HandlerMethodArgumentResolver;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import com.yzj.ehr.common.interceptor.UserPermissionInterceptor;/** * @Description 注冊攔截器 * @Author 陳皮 * @Date 2021/6/27 * @Version 1.0 */@Componentpublic class WebAppConfigurer implements WebMvcConfigurer { private UserPermissionInterceptor userPermissionInterceptor; public WebAppConfigurer(final UserPermissionInterceptor userPermissionInterceptor) {this.userPermissionInterceptor = userPermissionInterceptor; } @Override public void addInterceptors(InterceptorRegistry registry) {// 匹配所有接口,排除/base/test接口registry.addInterceptor(userPermissionInterceptor).addPathPatterns('/**').excludePathPatterns('/base/test'); }}

到此這篇關于SpringBoot 攔截器妙用你真的了解嗎的文章就介紹到這了,更多相關SpringBoot 攔截器內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: MES系统工业智能终端_生产管理看板/安灯/ESOP/静电监控_讯鹏科技 | 流程管理|流程管理软件|企业流程管理|微宏科技-AlphaFlow_流程管理系统软件服务商 | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | 木材烘干机,木炭烘干机,纸管/佛香烘干设备-河南蓝天机械制造有限公司 | 防爆鼓风机-全风-宏丰鼓风机-上海梁瑾机电设备有限公司 | 粘度计维修,在线粘度计,二手博勒飞粘度计维修|收购-天津市祥睿科技有限公司 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 新能源汽车教学设备厂家报价[汽车教学设备运营18年]-恒信教具 | 建筑资质代办-建筑资质转让找上海国信启航 | 【法利莱住人集装箱厂家】—活动集装箱房,集装箱租赁_大品牌,更放心 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | 比士亚-专业恒温恒湿酒窖,酒柜,雪茄柜的设计定制 | 传动滚筒_厂家-淄博海恒机械制造厂 | 医用酒精_84消毒液_碘伏消毒液等医用消毒液-漓峰消毒官网 | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 扒渣机厂家_扒渣机价格_矿用扒渣机_铣挖机_撬毛台车_襄阳永力通扒渣机公司 | 短信群发平台_群发短信软件_短信营销-讯鸽科技 | 领袖户外_深度旅游、摄影旅游、小团慢旅行、驴友网 | 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 骁龙云呼电销防封号系统-axb电销平台-外呼稳定『免费试用』 | 阳光模拟试验箱_高低温试验箱_高低温冲击试验箱_快速温变试验箱|东莞市赛思检测设备有限公司 | 识禅_对禅的了解,从这里开始| 精密五金加工厂-CNC数控车床加工_冲压件|蜗杆|螺杆加工「新锦泰」 | 亮点云建站-网站建设制作平台| 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 学习安徽网| 酸度计_PH计_特斯拉计-西安云仪| 天津云仓-天津仓储物流-天津云仓一件代发-顺东云仓 | NMRV减速机|铝合金减速机|蜗轮蜗杆减速机|NMRV减速机厂家-东莞市台机减速机有限公司 | 福建自考_福建自学考试网 | 德国进口电锅炉_商用电热水器_壁挂炉_电采暖器_电热锅炉[德国宝] | 机制砂选粉机_砂石选粉机厂家-盐城市助成粉磨科技有限公司 | 烘箱-工业烘箱-工业电炉-实验室干燥箱 - 苏州华洁烘箱制造有限公司 | YT保温材料_YT无机保温砂浆_外墙保温材料_南阳银通节能建材高新技术开发有限公司 | 驾驶人在线_专业学车门户网站 | 全国冰箱|空调|洗衣机|热水器|燃气灶维修服务平台-百修家电 | 自动钻孔机-全自动数控钻孔机生产厂家-多米(广东)智能装备有限公司 | 警用|治安|保安|不锈钢岗亭-售货亭价格-垃圾分类亭-移动厕所厂家-苏州灿宇建材 | 山东活动策划|济南活动公司|济南公关活动策划-济南锐嘉广告有限公司 | 耙式干燥机_真空耙式干燥机厂家-无锡鹏茂化工装备有限公司 | 衡阳耐适防护科技有限公司——威仕盾焊接防护用品官网/焊工手套/焊接防护服/皮革防护手套 |