Spring Cloud Gateway使用RewritePath时出现CORS问题求助
解决方案
1. 修复RewritePath路径重写规则
当前的RewritePath=/assessment/, /bff/assessment/仅匹配带末尾斜杠的请求(如/assessment/),对于无斜杠的/assessment或子路径/assessment/detail无法正确重写,导致请求转发到后端错误路径,返回404且缺失CORS响应头。
修改为正则匹配规则,覆盖所有/assessment开头的请求:
filters: - RewritePath=/assessment(?<remaining>.*), /bff/assessment${remaining}
2. 由网关统一处理CORS,关闭后端微服务的CORS配置
既然网关已配置全局CORS,后端Micronaut服务的CORS配置可直接关闭,避免响应头冲突:
将微服务配置中的micronaut.server.cors=true改为micronaut.server.cors=false。
网关会在响应中自动添加符合要求的Access-Control-Allow-Origin等CORS头,无需后端重复处理。
3. 单独拦截处理OPTIONS预请求
若上述调整后仍存在问题,可添加专门的路由拦截所有OPTIONS请求,直接由网关返回CORS响应,避免转发到后端:
routes: # 放在所有路由最前面,优先匹配OPTIONS请求 - id: cors-options-handler uri: no://op predicates: - Method=OPTIONS - Path=/** filters: - SetStatus=200 - AddResponseHeader=Access-Control-Allow-Origin, * - AddResponseHeader=Access-Control-Allow-Headers, * - AddResponseHeader=Access-Control-Allow-Methods, GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, TRACE
4. 验证路由顺序
确保cors-options-handler路由排在其他路由之前,保证OPTIONS请求被优先处理。
内容的提问来源于stack exchange,提问作者San Jaisy
相关产品推荐
相关产品推荐

