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

微服务中引入公共拦截器

        本文使用的微服务版本为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的依赖,这样这个配置类就不会生效。

 

http://www.lryc.cn/news/2398511.html

相关文章:

  • Ubuntu20.04 LTS 升级Ubuntu22.04LTS 依赖错误 系统崩溃重装 Ubuntu22.04 LTS
  • C++11:unique_ptr的基本用法、使用场景和最佳使用指南
  • 测量3D翼片的距离与角度
  • 零基础学习计算机网络编程----socket实现UDP协议
  • 谷歌地图2022高清卫星地图手机版v10.38.2 安卓版 - 前端工具导航
  • RAG的ETL Pipeline源码解读
  • 杭州白塔岭画室怎么样?和燕壹画室哪个好?
  • Linux文件系统:从VFS到Ext4的奇幻之旅
  • 5月底 端午节
  • 为何选择Spring框架学习设计模式与编码技巧?
  • 软件评测师 综合测试 真题笔记
  • 晶台光耦在手机PD快充上的应用
  • JS对数据类型的检测
  • llama.cpp:纯 C/C++ 实现的大语言模型推理引擎详解一
  • 【亲测有效 | Cursor Pro每月500次快速请求扩5倍】(Windows版)Cursor中集成interactive-feedback-mcp
  • BaseTypeHandler用法-笔记
  • 鸿蒙OSUniApp集成WebGL:打造跨平台3D视觉盛宴#三方框架 #Uniapp
  • 华为盘古 Ultra MoE 模型:国产 AI 的技术突破与行业影响
  • Payload CMS:开发者优先的Next.js原生开源解决方案,重新定义无头内容管理
  • CRM管理软件的数据可视化功能使用技巧:让数据驱动决策
  • linux批量创建文件
  • 颠覆传统!单样本熵最小化如何重塑大语言模型训练范式?
  • 华为数据之道 精读——【173页】读书笔记【附全文阅读】
  • 数据库OCP专业认证培训
  • ssm学习笔记day04
  • Read View在MVCC里如何工作
  • HDFS 写入和读取流程
  • 建筑工程施工进度智能编排系统 (SCS-BIM)
  • Laravel模型状态:深入理解Eloquent的隐秘力量
  • Spring Cloud Eureka:微服务架构中的服务注册与发现核心组件