我在application.properties中配置spring云网关(v3.0.3) url,如下所示:
# 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时,但是当我请求这样的服务时:
➜ ~ 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网关日志输出:
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的数学
发布于 2022-02-27 03:39:44
spring云网关谓词关系是,因此在您的配置中,这两个条件都应该是符合规则的。要使您的配置像预期的那样工作,您可以尝试这样调整您的配置:
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注意,精确匹配的顺序应该小于模糊匹配。
https://stackoverflow.com/questions/71274807
复制相似问题