spring cloud gateway-filter深入了解(StripPrefix与PrefixPath)
网关过滤器
StripPrefix 过滤器
- 作用: 去掉部分URL路径
spring: cloud: gateway: routes: - id: bds-lbs-service uri: lb://bds-lbs-service predicates:
#断言,路径相匹配的进行路由 - Path=/lbs/** filters: - StripPrefix=1
- 如上,我们访问网关地址
http://host:port/lbs/hello
时- 若无
StripPrefix
过滤器时,gateway 发送请求到后台服务bds-lbs-service
的url就是http://bds-lbs-service/lbs/hello
- 若有
StripPrefix
过滤器时,gateway会根据StripPrefix=1
所配的值(这里是1)去掉URL路径中的部分前缀(这里去掉一个前缀,即去掉lbs
)- 发送请求到后台服务
spring-cloud-producer
的url变成http://bds-lbs-service/hello
- 发送请求到后台服务
- 若无
/** 是模糊匹配
PrefixPath 过滤器
- 作用: 它的作用和
StripPrefix
正相反,是在URL路径前面添加一部分的前缀
1 2 3 4 5 6 7 8 | spring: cloud: gateway: routes: - id: bds-lbs-service uri: lb: //bds-lbs-service filters: - PrefixPath=/lbs |
- 这将会把
/lbs
添加到路由prefixpath_route
匹配到的所有请求的路径的前面。- 所以对
/hello
的请求将会被发送到/lbs/hello
。
- 所以对
转:spring cloud gateway-filter深入了解(StripPrefix与PrefixPath)
2.因为StripPrefix 没有配置报404错误
{ "timestamp": "2022-11-23T06:20:35.526+0000", "status": 404, "error": "Not Found", "message": "No message available", "path": "/payment/getChannel" }
单独访问微服务:http://127.0.0.1:8001/getChannel 是可以拿到数据的
通过getway拿不到:http://127.0.0.1:9527/payment/getChannel
问题出在payment这个匹配字段上了,网关转发请求的到8001的时候是没有payment,需要通过stripPrefix =1去掉
spring: cloud: nacos: discovery: # 服务注册地址 server-addr: 127.0.0.1:8848 gateway: discovery: locator: #是否与服务发现组件进行结合,通过serviceId转发到具体实例 #是否开启基于服务发现的路由规则 enabled: true ##表示将请求路径的服务名配置改成小写 ,因为服务注册的时候,向注册中心注册时将服务名转成大写的了 lowerCaseServiceId: true routes: # 消费者模块 - id: payment_routh uri: lb://cloud-payment-service-8001 predicates: #断言,路径相匹配的进行路由 - Path=/payment/** - After=2022-08-17T10:13:22.283+08:00[Asia/Shanghai] filters: - StripPrefix=1
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升