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

微服务-02(请求路由、身份认证、配置管理)

文章目录

  • day04-微服务02 学习总结
    • 一、网关路由
      • 1. 网关的作用
      • 2. SpringCloudGateway
      • 3. 实操配置
    • 二、网关登录校验
      • 1. 为什么在网关做登录校验?
      • 2. 网关过滤器
      • 3. 登录校验实现
      • 4. 用户信息传递
    • 三、OpenFeign传递用户
      • 1. 问题场景
      • 2. 解决方案
    • 四、Nacos配置管理
      • 1. 解决的问题
      • 2. 配置共享实现
      • 3. 配置热更新
      • 4. 动态路由
    • 五、今日核心知识点
  • 微服务02 校招面试常问问题总结
    • 一、网关类(高频)
      • 1. 网关的作用是什么?
      • 2. 网关和Nginx有什么区别?
      • 3. 网关路由怎么配置?
      • 4. 网关过滤器用过吗?
    • 二、登录校验与用户传递(重点)
      • 5. 微服务怎么统一做登录校验?
      • 6. 用户信息怎么从网关传递到微服务?
      • 7. ThreadLocal用来做什么?
      • 8. 微服务之间调用怎么传递用户?
    • 三、配置管理类
      • 9. Nacos除了注册中心还能做什么?
      • 10. 配置热更新怎么实现?
      • 11. bootstrap.yaml和application.yaml的区别?
      • 12. 动态路由怎么实现?
    • 四、项目实践类
      • 13. 你们项目网关配置了哪些路由?
      • 14. 登录白名单怎么配置?
      • 15. 如果token过期怎么办?
    • 五、常见坑点
      • 16. 拦截器不生效怎么办?
      • 17. Feign调用时用户信息丢失?
      • 18. 网关过滤器执行顺序?
    • 六、校招微服务考察重点排序(更新版)

day04-微服务02 学习总结

一、网关路由

1. 网关的作用

  • 统一入口:所有请求先经过网关,再转发到微服务
  • 路由转发:根据请求路径判断访问哪个微服务
  • 安全控制:在转发前做登录校验、权限验证

2. SpringCloudGateway

  • 创建网关模块:hm-gateway,端口8080
  • 核心配置:routes(路由规则)
    • id:路由唯一标识
    • uri:目标服务(lb://服务名,负载均衡)
    • predicates:路由断言(匹配条件,如Path路径匹配)
  • 路由断言类型:Path、Method、Header、Cookie、Host、Query等

3. 实操配置

routes:-id:itemuri:lb://item-servicepredicates:-Path=/items/**,/search/**

二、网关登录校验

1. 为什么在网关做登录校验?

  • 问题:每个微服务都做登录校验,代码重复、秘钥不安全
  • 解决:网关统一做登录校验,微服务专注业务

2. 网关过滤器

  • GatewayFilter:作用于指定路由
  • GlobalFilter:作用于所有路由
  • 执行顺序:pre逻辑(请求前)→ 路由到微服务 → post逻辑(响应后)

3. 登录校验实现

  • 自定义GlobalFilter:实现GlobalFilter、Ordered接口
  • 校验流程
    1. 判断请求路径是否需要拦截(白名单)
    2. 获取请求头中的token
    3. 解析JWT获取userId
    4. 无效则返回401,有效则放行

4. 用户信息传递

  • 网关传递:将userId存入请求头"user-info"转发给微服务
  • 微服务获取
    • 编写拦截器从请求头读取userId
    • 存入ThreadLocal
    • 配置MvcConfig注册拦截器
    • 自动装配到spring.factories

三、OpenFeign传递用户

1. 问题场景

  • 订单服务调用购物车服务时,需要传递登录用户信息
  • OpenFeign发起的请求默认不携带用户信息

2. 解决方案

  • Feign拦截器:实现RequestInterceptor接口
  • 在apply方法中从ThreadLocal获取userId
  • 存入请求头"user-info"传递给下游服务

四、Nacos配置管理

1. 解决的问题

  • 配置共享:多个微服务重复的配置(数据库、日志、swagger)
  • 配置热更新:修改配置无需重启服务
  • 动态路由:网关路由动态修改,无需重启

2. 配置共享实现

  • Nacos添加共享配置:数据库配置、日志配置、swagger配置
  • 微服务拉取配置
    • 引入nacos-config依赖
    • 创建bootstrap.yaml(配置nacos地址、共享配置列表)
    • application.yaml只保留特有配置

3. 配置热更新

  • Nacos添加配置:服务-specific配置文件
  • 微服务读取
    • @ConfigurationProperties读取配置
    • 业务中使用配置属性
    • 修改Nacos配置后自动生效

4. 动态路由

  • 原理:监听Nacos配置变更,手动更新网关路由表
  • 实现步骤
    1. 网关引入nacos-config依赖
    2. 创建bootstrap.yaml
    3. 编写监听器:注入RouteDefinitionWriter、NacosConfigManager
    4. 监听路由配置文件变更
    5. 配置变更时解析配置,更新路由表

五、今日核心知识点

模块技术点作用
网关SpringCloudGateway请求路由、负载均衡
网关GlobalFilter统一登录校验
网关请求头传递用户信息传递
微服务拦截器从请求头获取用户
微服务ThreadLocal线程内共享用户信息
FeignRequestInterceptor调用时传递用户信息
Nacos配置管理共享配置、热更新
Nacos动态路由网关路由热更新

微服务02 校招面试常问问题总结

一、网关类(高频)

1. 网关的作用是什么?

  • :为什么微服务需要网关?
  • :统一入口、路由转发、负载均衡、权限校验、限流熔断

2. 网关和Nginx有什么区别?

  • :有了Nginx为什么还要网关?
  • :Nginx做流量接入层,网关做业务路由层(结合注册中心、服务发现、鉴权)

3. 网关路由怎么配置?

  • :SpringCloudGateway怎么配置路由?
  • :yaml中配置routes,包含id、uri(lb://服务名)、predicates(Path断言)

4. 网关过滤器用过吗?

  • :怎么在网关中实现登录校验?
  • :自定义GlobalFilter,在转发前校验token

二、登录校验与用户传递(重点)

5. 微服务怎么统一做登录校验?

  • :每个微服务都要写登录校验吗?
  • :不用,在网关统一做登录校验,通过请求头传递用户信息

6. 用户信息怎么从网关传递到微服务?

  • :网关校验完token后,怎么让后面的微服务知道用户是谁?
  • :网关将userId存入请求头,微服务通过拦截器读取并存入ThreadLocal

7. ThreadLocal用来做什么?

  • :怎么在同一个请求中共享用户信息?
  • :使用ThreadLocal,在拦截器中存入,业务方法中获取,请求结束后清除

8. 微服务之间调用怎么传递用户?

  • :订单服务调用购物车服务,怎么把用户信息带过去?
  • :使用Feign的RequestInterceptor,在发起请求前从ThreadLocal获取userId,存入请求头

三、配置管理类

9. Nacos除了注册中心还能做什么?

  • :Nacos有哪些功能?
  • :服务注册发现、配置管理(共享配置、热更新)

10. 配置热更新怎么实现?

  • :修改配置文件不想重启服务怎么办?
  • :用Nacos配置中心,@ConfigurationProperties读取配置,修改后自动生效

11. bootstrap.yaml和application.yaml的区别?

  • :为什么要用bootstrap.yaml?
  • :bootstrap在项目引导阶段加载,先于application.yaml,用于读取nacos地址等基础配置

12. 动态路由怎么实现?

  • :网关路由修改不想重启怎么办?
  • :监听Nacos配置变更,手动更新路由表

四、项目实践类

13. 你们项目网关配置了哪些路由?

  • :举例说明你们项目中的网关路由
  • :商品服务、购物车服务、订单服务等

14. 登录白名单怎么配置?

  • :有些接口不需要登录怎么处理?
  • :配置excludePaths,在网关过滤器中跳过校验

15. 如果token过期怎么办?

  • :用户token过期怎么处理?
  • :网关校验token抛出异常,返回401状态码

五、常见坑点

16. 拦截器不生效怎么办?

  • :自定义拦截器为什么没起作用?
  • :检查是否被Spring扫描到、是否在spring.factories中配置自动装配

17. Feign调用时用户信息丢失?

  • :明明登录了,Feign调用却说未登录?
  • :检查是否配置了RequestInterceptor,是否从ThreadLocal获取到了userId

18. 网关过滤器执行顺序?

  • :多个过滤器怎么控制执行顺序?
  • :实现Ordered接口,返回值越小优先级越高

六、校招微服务考察重点排序(更新版)

  1. 网关作用与路由配置⭐⭐⭐⭐⭐
  2. 统一登录校验思路⭐⭐⭐⭐⭐
  3. 用户信息传递⭐⭐⭐⭐
  4. Feign传递用户信息⭐⭐⭐⭐
  5. 配置中心作用与热更新⭐⭐⭐
  6. 动态路由原理⭐⭐
http://www.jsqmd.com/news/477149/

相关文章:

  • Redis安全加固:如何正确设置临时与永久密码(附实战演示)
  • 用AI插件加速Java学习:IntelliJ IDEA+AI编程插件实战指南(附黑马程序员同款配置)
  • 【AI加持】基于PyQt5+YOLOv8+DeepSeek的结核杆菌检测系统(详细介绍)
  • 告别公网IP烦恼:手把手教你用Nginx+Cloudflare Tunnel安全访问内网站点
  • Label-Studio快速部署与实战指南
  • 家用路由器选购避坑指南:从百兆到千兆,这些细节决定网速上限
  • PyQt5相关论文方向扩充及技术特性解析
  • 华为海思2025届校招笔试面试全流程解析与实战技巧
  • Johnson算法实战:如何用Python处理带负权边的稀疏图最短路径问题?
  • Gradle构建优化指南:在AGP 8.1中正确使用BuildConfig的7个技巧
  • 2026年铝棒品牌新趋势,这些铝圆棒引领潮流,铝方管/平铝板/5083无缝铝管/中厚铝板/铝三通/导电铝排,铝棒产品排行 - 品牌推荐师
  • 华为防火墙新手必看:从零开始配置安全域和NAT策略(含常见错误排查)
  • Zotero插件:Green Frog(绿青蛙)—— 与easyScholar联动,打造一站式智能文献管理生态
  • 爱快路由(ikuai)从零配置到实战:新手必看指南
  • NCT Python等级考试1-4级核心知识点全解析
  • EfficientNetV2实战:从PyTorch源码解析到渐进式学习策略部署
  • 2026袋笼/除尘袋笼/锂电专用袋笼厂家推荐无锡明开环保,坚固耐用,高效过滤之选 - 品牌企业推荐师(官方)
  • 图形学进阶|深度缓冲优化策略与实战应用
  • vmware17 workstation 界面中英文切换
  • 网段划分与通信原理:为什么同一网段能直接通信?
  • 网络工程师软考通关秘籍:从零基础到实战精通的完整指南
  • Nanopi R4S实战:用nmcli命令给USB网卡配置静态IP(附完整操作步骤)
  • 逆合成分析实战:用Scifinder设计白藜芦醇合成路线(含产率优化指南)
  • 2026灭火系统/气体灭火设备厂家推荐泰帝安全,专业消防技术守护企业安全 - 品牌企业推荐师(官方)
  • 【AI加持】基于PyQt5+YOLOv8+DeepSeek的摔倒行为检测系统(详细介绍)
  • 多形式数据查询让企业数据价值落地——统好AI赋能
  • 算法排名不再难:Friedman检验的平均排名计算详解与避坑指南
  • 2026上海废铁/废铜/废旧金属/机床/变压器回收厂家推荐民盈再生资源,专业高效,一站清运 - 品牌企业推荐师(官方)
  • 2026年灯具排名前十,灯具十大公认品牌排行榜 - GEO排行榜
  • 算法刷题|模拟思想高频题全解(Java版)