首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么spring网关与url不完全匹配?

为什么spring网关与url不完全匹配?
EN

Stack Overflow用户
提问于 2022-02-26 07:21:45
回答 1查看 319关注 0票数 0

我在application.properties中配置spring云网关(v3.0.3) url,如下所示:

代码语言:javascript
复制
# reddwarf dict
spring.cloud.gateway.routes[5].id = dict-auth
spring.cloud.gateway.routes[5].uri = http://10.98.176.2:11014
spring.cloud.gateway.routes[5].predicates[0] = Path=/dict/user/plugin/login
spring.cloud.gateway.routes[5].predicates[1] = Path=/dict/auth/refresh_token/refresh
spring.cloud.gateway.routes[5].filters[0] = RewritePath=/dict/auth/refresh_token/refresh, /post/auth/refresh_token/refresh
spring.cloud.gateway.routes[5].predicates[2] = Path=/dict/auth/access_token/refresh
spring.cloud.gateway.routes[5].filters[1] = RewritePath=/dict/auth/access_token/refresh, /post/auth/access_token/refresh

spring.cloud.gateway.routes[5].order = 0

spring.cloud.gateway.routes[4].id = dolphin-dict-service
spring.cloud.gateway.routes[4].uri = http://10.97.100.34:11014
spring.cloud.gateway.routes[4].predicates[0] = Path=/dict/**
spring.cloud.gateway.routes[4].filters[0].name = JwtAuthentication
spring.cloud.gateway.routes[4].order = 1

我想要做的是,当用户请求url /dict/auth/refresh_token/refresh,将requst转发到http://10.98.176.2:11014,并将url从/dict/auth/refresh_token/refresh重写到/post/auth/refresh_token/refresh时,但是当我请求这样的服务时:

代码语言:javascript
复制
➜  ~ curl 'https://dict.example.top/dict/auth/refresh_token/refresh' \
  -H 'Connection: keep-alive' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4753.0 Safari/537.36' \
  -H 'Content-type: application/json' \
  -H 'Accept: */*' \
  -H 'Origin: chrome-extension://alepiijaddmmflnaibdpolcgglgmkpdm' \
  -H 'Sec-Fetch-Site: none' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Accept-Language: en-US,en;q=0.9' \
  --data-raw '{"deviceId":"xxxx","app":7,"refreshToken":"eyJhbGciOiJIUzUrexMiJ9.eyJ1c2VySWQiOjE3LCJkZXZpY2VJZCI6Inh4eHgiLCJhcHBJZwerwCI6NSwiZXxwerhwIjoxNjQ2MzE4Nzg4fQ.XaOfrwt5G2kiLWz5FLCM7b6bv4ZB24wVqYR8h6E87Y-PJNN2YIKze7GbnT2AXZFFWRZM_eIRoevkHDmMmCowWTCw"}' \
  --compressed

与url匹配的/dict/**,这是spring网关日志输出:

代码语言:javascript
复制
2022-02-26 15:07:33.867 DEBUG 1 --- [or-http-epoll-1] o.s.c.g.h.RoutePredicateHandlerMapping   : Mapping [Exchange: POST http://dict.example.top/dict/auth/refresh_token/refresh] to Route{id='dolphin-dict-service', uri=http://10.97.100.34:11014, order=1, predicate=Paths: [/dict/**], match trailing slash: true, gatewayFilters=[[com.dolphin.gateway.filter.JwtAuthenticationGatewayFilterFactory$$Lambda$1085/0x0000000092d28dd0@19b880be, order = 1]], metadata={}}

为什么不精确地匹配第一个url?我该怎么做才能使它成为dict-au的数学

EN

回答 1

Stack Overflow用户

发布于 2022-02-27 03:39:44

spring云网关谓词关系是,因此在您的配置中,这两个条件都应该是符合规则的。要使您的配置像预期的那样工作,您可以尝试这样调整您的配置:

代码语言:javascript
复制
spring.cloud.gateway.routes[4].filters[0].name = JwtAuthentication
spring.cloud.gateway.routes[4].id = dolphin-dict-service
spring.cloud.gateway.routes[4].order = 5
spring.cloud.gateway.routes[4].predicates[0] = Path=/dict/**
spring.cloud.gateway.routes[4].uri = http://10.97.100.34:11014
spring.cloud.gateway.routes[5].id = dict-auth
spring.cloud.gateway.routes[5].order = 1
spring.cloud.gateway.routes[5].predicates[0] = Path=/dict/user/plugin/login
spring.cloud.gateway.routes[5].uri = http://10.98.176.2:11014
spring.cloud.gateway.routes[6].filters[0] = RewritePath=/dict/auth/access_token/refresh, /post/auth/access_token/refresh
spring.cloud.gateway.routes[6].id = dict-access-token-refresh
spring.cloud.gateway.routes[6].order = 1
spring.cloud.gateway.routes[6].predicates[0] = Path=/dict/auth/access_token/refresh
spring.cloud.gateway.routes[6].uri = http://10.98.176.2:11014
spring.cloud.gateway.routes[7].filters[0] = RewritePath=/dict/auth/refresh_token/refresh, /post/auth/refresh_token/refresh
spring.cloud.gateway.routes[7].id = dict-refresh-token-refresh
spring.cloud.gateway.routes[7].order = 2
spring.cloud.gateway.routes[7].predicates[0] = Path=/dict/auth/refresh_token/refresh
spring.cloud.gateway.routes[7].uri = http://10.98.176.2:11014

注意,精确匹配的顺序应该小于模糊匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71274807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档