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

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

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

问题背景与要解决的问题

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.gsyq.cn/news/66339.html

相关文章:

  • 状压DP 学习笔记
  • 应用Graphics2D创建滑块验证码
  • 2025年河北实力不错的西点学校排名:西点学校哪家权威?西点
  • 智链芯未来:哲讯科技以SAP系统赋能半导体产业数字化变革
  • mac 防止brew 安装 nginx 后不通过服务直接启动
  • 从小工到专家3
  • 2025常州本地美食新地标TOP5权威推荐:挖掘城市烟火味,
  • CICD(一)CI/CD概述及GitLab部署和一些Git命令 - 详解
  • 2025专业奢侈品回收平台TOP5推荐:综合口碑企业助力安全
  • 同步带轮厂家TOP5权威推荐:同步带轮制造厂甄选指南,专业的
  • 代码大全阅读笔记4
  • 题解:B4395 [常州市赛 2025] 金币
  • 2025年新能源汽车充电桩生产商哪家好?新能源汽车充电桩生产
  • 完整教程:Springboot的民宿管理系统的设计与实现29rhm9uh(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 2025年十大口碑好的文艺演出公司推荐,专业有实力的文艺展示
  • 解决FastAPI,docs打不开
  • ABC434G Keyboard
  • Apache Hudi 项目总体分析
  • samba的常见问题
  • 【源码解读之 Mybatis】【核心篇】-- 第8篇:ResultSetHandler结果集处理
  • 2025年佛山地区桶装水配送服务商推荐:比较好的桶装水送水电
  • 2025年中国十大知名的活动策划企业推荐:诚信的活动策划企业
  • tts服务
  • 2025年高温测试机构推荐与高温实验机构排名,高温试验品牌企
  • Spring AI实现一个简单的对话机器人
  • 惠算科技 GEO 优化优选惠州本地生活推荐:生成式引擎优化时代的本地商家获客破局指南
  • Genie 2:大规模基础世界模型的技术突破
  • 2025年十大讲解机器人供应企业排名,讲解机器人哪家好
  • 2025年全国无损检测仪器服务商年度排名:北京时代光南检测技
  • 字节跳动在GitHub上有哪些开源项目