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

微服务中引入公共拦截器

        本文使用的微服务版本为springcloudAlbaba :2021.0.4.0

        微服务工程,一般公共的东西都放入一个工程,别的微服务都会引入这个工程,比如common-service,那么就可以在这个工程编写一个拦截器:,比如:

public class UserInfoInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//从请求头中获取用户信息String header = request.getHeader("user-info");if(StrUtil.isNotBlank(header)){//这里UserContext的user是个ThreadLocalUserContext.setUser(Long.valueOf(header));}return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {UserContext.removeUser();}
}

        这里是做个用户信息获取的拦截器,从请求头中获取用户信息,然后塞入ThreadLocal中,供后续业务使用。

        定义完了,为了使它生效,编译一个配置类:

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new UserInfoInterceptor());}
}

        然后利用springboot自动装配的原理,在spring.factroies中添加MvcConfig的全路径,

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.*.common.config.MvcConfig

        这里*用你实际的就好,别真的写*。

        这样所有引入common-service依赖的微服务都添加了这个拦截器。

        但是注意如果某个微服务启动报错,可能是你的某这个微服务没有引入springmvc的依赖,比如网关微服务,网关不需要springmvc的依赖,也不需要这个拦截器,

        我们同样利用springboot自动装配ConditionalOnClass注解的特性来让网关不引入这个拦截器。只需要加上一段@ConditionalOnClass(DispatcherServlet.class)即可

@Configuration
@ConditionalOnClass(DispatcherServlet.class)
public class MvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new UserInfoInterceptor());}
}
        DispatcherServlet是springmvc的核心类,使用ConditionalOnClass,即判断当前有没有引入springmvc的依赖来判断是否引入MvcConfig 这个配置类,网关没有springmvc的依赖,这样这个配置类就不会生效。

 

相关文章:

  • GB 36246-2018 中小学合成材料面层运动场地检测
  • C++ 观察者模式:设计与实现详解
  • 建造者模式:优雅构建复杂对象
  • 飞腾D2000与FPGA结合的主板
  • FPGA纯verilog实现MIPI-DSI视频编码输出,提供工程源码和技术支持
  • proteus美观与偏好设置
  • 鲲鹏Arm+麒麟V10 K8s 离线部署教程
  • git下载和安装(完整版)
  • 【Docker项目实战篇】Docker部署PDF查看器PdfDing
  • 【Dv3Admin】工具权限配置文件解析
  • 机器学习:欠拟合、过拟合、正则化
  • Qt -使用OpenCV得到SDF
  • MacOS安装Docker Desktop并汉化
  • [001]从操作系统层面看锁的逻辑
  • 【大模型面试每日一题】Day 33:深度解析GPT-3与PaLM的规模扩展差异及影响
  • 有机黑鸡蛋与普通鸡蛋:差异剖析与选购指南
  • 《Effective Python》第六章 推导式和生成器——避免在推导式中使用超过两个控制子表达式
  • Compose原理 - 整体架构与主流程
  • 基于Python学习《Head First设计模式》 第一章 策略模式
  • 2025年全国青少年信息素养大赛复赛C++算法创意实践挑战赛真题模拟强化训练(试卷3:共计6题带解析)
  • 摄影赚钱的网站/如何制作微信小程序店铺
  • 服务好的武进网站建设/关键词推广价格
  • 河北中瑞建设集团有限公司网站/网站功能优化
  • 做网站是三网合一有什么优势/什么叫seo优化
  • 设计师网站1688/跨境电商平台推广
  • 门户网站建设所需条件/chrome浏览器下载安卓手机