苍穹外卖-异常排查笔记:拆分微服务后出现的401,403报错处理

news/2025/11/30 16:34:45/文章来源:https://www.cnblogs.com/lslasjio/p/19289607

苍穹外卖微服务模块调用与异常排查笔记

问题背景与要解决的问题

1. 背景

苍穹外卖项目从单体架构拆分为微服务架构,拆分出sky-common(公共模块)、sky-server-gateway(网关模块)、sky-server-admin-operation(管理端业务模块)。拆分后因模块间依赖传递、配置缺失 / 冲突,前端通过网关访问管理端接口时出现401(未认证)403(禁止访问) 报错,原单体架构的配置逻辑不再适配微服务调用流程。

2. 要解决的问题

  • 梳理微服务架构下请求从前端→网关→业务服务的完整调用逻辑,定位 401/403 报错的根本原因;
  • 解决模块间配置冲突(如 Security 配置干扰)、关键配置缺失(如网关跨域配置)问题;
  • 形成适配微服务架构的配置方案,确保请求在各模块间顺畅流转,消除接口访问异常。

一、模块定位与关系

1. 模块核心作用

模块名称 定位与作用
sky-common 公共模块(工具箱):存放全局配置(如SecurityConfig)、工具类,被网关和业务服务依赖
sky-server-gateway 网关模块(总开关):接收前端所有请求,按路由规则转发到对应业务服务
sky-server-admin-operation 管理端业务模块(处理器):处理/admin/**路径的业务逻辑(如员工登录、菜品管理)

2. 模块关系图

graph TDA[前端<br/>(浏览器/Postman)] --> B[sky-server-gateway<br/>网关]B --> C[sky-server-admin-operation<br/>管理端业务服务]C -.-> D[sky-common<br/>公共配置/工具]B -.-> D

二、正常请求调用流程

1. 流程图

graph LRA[前端] -->|1.发送请求<br/>http://网关:8080/admin/login| B[网关]B -->|2.匹配路由规则<br/>Path=/admin/** → 转发到admin-operation| C[admin-operation]C -->|3.经过Security过滤<br/>(common配置放行)| D[Controller处理业务逻辑]D -->|4.返回响应结果| CC -->|5.回传响应| BB -->|6.返回结果给前端| A

2. 步骤说明

  1. 前端发起请求:访问网关统一入口(如8080端口);
  2. 网关路由转发:根据Path=/admin/**规则,将请求转发到admin-operation8081端口);
  3. Security过滤admin-operation加载common的Security配置,放行合法请求;
  4. 业务处理与响应:Controller处理逻辑后,结果经网关回传前端。

三、401/403异常原因及拦截逻辑

1. 401异常(未认证)

流程图

graph LRA[前端] -->|1.请求/admin/login| B[网关]B -->|2.转发到admin-operation| C[admin-operation]C -->|3.默认Security拦截<br/>(无common配置,需认证)| E[返回401<br/>“未认证”]E --> C --> B --> A

核心原因

admin-operation依赖common但缺少Security配置,启用Spring Security默认规则(所有请求需登录认证,默认用户user+随机密码),请求无认证信息被拦截。

拦截位置

admin-operation的Security过滤器链(FilterSecurityInterceptor)。

2. 403异常(禁止访问)

流程图

graph LRA[前端] -->|1.发送OPTIONS预检请求<br/>(跨域检查)| B[网关]B -->|2.无跨域配置 → 拦截| F[返回403<br/>“跨域禁止”]F --> B --> AA -->|3.网关加载common的Security| BB -->|4.CSRF校验失败 → 拦截| G[返回403<br/>“CSRF错误”]G --> B --> A

核心原因

  • 跨域配置缺失:前端跨域访问时,浏览器先发OPTIONS预检请求,网关未配置CORS导致拦截;
  • Security依赖干扰:网关依赖common后,间接加载Security配置(虽为Servlet配置,但残留逻辑引发CSRF校验失败)。

拦截位置

网关的CORS过滤器(无配置时)或Security过滤器(残留配置时)。

四、异常解决策略

1. 401异常解决:sky-common添加全局Security配置

sky-common中创建SecurityCommonConfig,统一放行业务接口:

@Configuration
@EnableWebSecurity
public class SecurityCommonConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable()          // 关闭CSRF校验.authorizeRequests().antMatchers("/admin/**").permitAll() // 放行业务接口.anyRequest().permitAll();http.httpBasic().disable();    // 关闭默认认证}@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder(); // 避免默认密码报错}
}

2. 403异常解决:网关针对性配置

(1)添加跨域配置(sky-server-gateway

@Configuration
public class GatewayCorsConfig {@Beanpublic CorsWebFilter corsWebFilter() {CorsConfiguration config = new CorsConfiguration();config.addAllowedOriginPattern("*"); // 允许跨域源config.addAllowedMethod("*");       // 允许所有请求方法config.setAllowCredentials(true);   // 允许携带CookieUrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", config);return new CorsWebFilter(source);}
}

(2)排除sky-common的Security依赖(网关pom.xml

<dependency><groupId>com.sky</groupId><artifactId>sky-common</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></exclusion></exclusions>
</dependency>

五、关键配置总结

配置场景 核心代码/操作 作用
common的Security配置 csrf().disable()+permitAll() 让业务服务放行接口,避免401
网关跨域配置 CorsWebFilter+允许跨域源/方法 处理OPTIONS预检请求,避免跨域403
网关依赖排除 排除spring-boot-starter-security 避免网关加载Security配置,消除干扰

六、最终正常流程

graph LRA[前端] -->|1.OPTIONS预检请求| B[网关]B -->|2.跨域配置处理<br/>允许跨域| AA -->|3.真实请求/admin/login| BB -->|4.转发到admin-operation| C[admin-operation]C -->|5.common的Security放行| D[Controller处理]D -->|6.返回结果| C --> B --> A

核心结论:异常本质是模块依赖传递导致的配置冲突+关键配置缺失,通过“common统一配置+网关针对性适配”,可实现请求顺畅流转。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/982010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WinForm界面布局

在C# WinForm中,界面布局是创建用户友好且功能完善应用程序的关键部分。以下详细介绍常见的布局方式及其示例。 1. 绝对定位(Absolute Positioning)原理:通过设置控件的 Location 属性(指定控件左上角相对于其父容…

P7137 [THUPC 2021 初赛] 切切糕

Solution 跟 这题 没什么区别。 设 \(f_{i,j}\) 表示切了 \(i\) 个蛋糕,Tinytree 使用了 \(j\) 次“优先选糕权”时他能拿到的最多蛋糕。那么有 \(f_{i,j}=\max(f_{i-1,j-1}+a_i-t,f_{i-1,j}+t),0 \le t \le \frac{a_…

完整教程:【普中STM32F1xx开发攻略--标准库版】-- 第 12 章 STM32 时钟系统

完整教程:【普中STM32F1xx开发攻略--标准库版】-- 第 12 章 STM32 时钟系统2025-11-30 16:22 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x…

状压DP 学习笔记

一、基础位操作:单个比特位的判断与修改功能 用途 位运算表达式 原理判断第 \(i\) 位是否为 \(1\)(元素 \(i\) 是否在集合中) 检查状态中是否包含某个元素(如 “城市 i 是否已访问”“任务 i 是否已完成”) (mask…

应用Graphics2D创建滑块验证码

应用Graphics2D创建滑块验证码pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

母婴商标购买平台实测 TOP 榜公布(2025版):这 5 家安全过户不踩雷

在母婴行业品牌化竞争白热化的 2025 年,一枚合规适配的商标成为企业入驻电商平台、建立消费者信任的 “关键门槛”。母婴类商标因覆盖食品、洗护、玩具、服饰等多个细分品类,对分类精准度、合规性及过户效率的要求远…

分子级的管理智慧:哲讯科技以SAP重塑化工行业安全与效能新标杆

分子级的管理智慧:哲讯科技以SAP重塑化工行业安全与效能新标杆化工行业,是现代工业体系的基石,从日常生活的衣食住行到关乎国计民生的高端材料,其身影无处不在。然而,这个创造无限可能的行业,也始终伴随着复杂的…

NOI Plus 2025 游记

T1 对于这种简单题,我们可以使用贪心解决。 对于这种简单的反悔贪心,我们显然是可以用网络流来做的。于是我开始思考费用流。 我开始建立费用流模型。对于每种商品建立两个点,源点向其中一个点连一条流量为无限,费…

2025赣州实力会议会展酒店TOP5权威推荐:专业场地赋能商

近年来,赣州作为区域经济与文旅融合的核心城市,商务会议、政务接待与大型庆典需求持续增长。2024年数据显示,赣州酒店会议会展业务年增速超25%,但行业痛点凸显:超30%的客户投诉集中在场地容量适配不足、设备老旧、…

Animation Rigging Unity官方的IK动画绑定教程

简单调整人物手臂IK看这个视频(5分钟): [Unity教程]-动画绑定(Animation Rigging)_哔哩哔哩_bilibili unity官方教程: [Unity 活动]-官方直播- Unity最新程序化动画绑定(Animation Rigging)技术介绍_哔哩哔哩_bilibi…

2025年河北实力不错的西点学校排名:西点学校哪家权威?西点

本榜单依托石家庄、保定、邯郸等河北核心城市的市场调研与真实学员口碑,深度筛选出5家标杆西点学校,为热爱西点的人群提供客观选型依据,助力精准匹配专业学习平台。 TOP1 推荐:河北欧米奇西点西餐学校 推荐指数:…

智链芯未来:哲讯科技以SAP系统赋能半导体产业数字化变革

智链芯未来:哲讯科技以SAP系统赋能半导体产业数字化变革在全球化竞争与技术迭代加速的背景下,半导体行业正面临前所未有的机遇与挑战。从芯片设计、晶圆制造到封装测试,产业链的复杂性与协同难度持续攀升。如何实现…

DDD支付模块

工作中对接了招商银行模块,但是回调过程中需要考虑很多问题,这里小计一下 网络不可靠!可能出现: 你的服务器临时过载(GC、Full GC) 数据库连接池满 防火墙拦截 代码 bug 导致 500 机房网络抖动 系统必须支持 幂等处…

实用指南:自然语言处理NLP的数据预处理:从原始文本到模型输入(MindSpore版)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

mac 防止brew 安装 nginx 后不通过服务直接启动

直接看代码~,逻辑很简单,把原命令替换掉NGINX_BIN=$(which nginx) sudo mv "$NGINX_BIN" "${NGINX_BIN}.bin" sudo tee "$NGINX_BIN" << EOF #!/bin/bashNGINX_REAL="${B…

2025年云南高三高考冲刺培训排名:高考冲刺培训推荐几家?

TOP1 推荐:昆明市五华区滇云教育培训学校有限公司 推荐指数:★★★★★ 口碑评分:云南家长公认的靠谱高考冲刺机构 专业能力:滇云教育是经五华区教体局批准的正规培训机构,以16年高考补习经验为根基,构建精细化管…

从小工到专家3

篇三:《终身成长:重新定义成功的思维模式》读后感 —— 专家的格局:用 “成长思维” 抵御职业天花板​ 成为行业内公认的 “专家” 后,我曾一度陷入 “能力固化” 的焦虑:担心自己的知识体系过时,害怕被新生代超…

2025常州本地美食新地标TOP5权威推荐:挖掘城市烟火味,

在消费升级与城市文旅融合的浪潮下,本地美食新地标已成为城市文化传播与消费活力的核心载体。2024年常州餐饮消费数据显示,美食打卡地带动的餐饮客流量年增35%,但消费者常遇特色同质化体验单一化文化割裂化三大痛点…

CICD(一)CI/CD概述及GitLab部署和一些Git命令 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

11.30代码大全二

一、核心认知:代码的本质是“与人沟通” 很多人误以为代码是写给计算机执行的,实则代码首先是写给人看的,其次才是给机器运行的——毕竟代码的生命周期中,编写时间仅占10%,其余90%都在阅读、修改、调试和维护。这…