春季云网关路径路由谓词匹配失败



在下面的 spring 云网关配置中,我试图将路径末尾与/favicon.ico匹配,但它无法匹配路径:/gitBooks/100/abc/favicon.ico

spring:
cloud:
gateway:
routes:
- id: favicon
uri: forward:///favicon.ico
predicates:
- Path=**/favicon.ico

Spring 云网关打印以下日志:

2020-02-04 22:57:35.703 TRACE 28356 --- [ctor-http-nio-2] o.s.c.g.h.p.RoutePredicateFactory        : Pattern "[**/favicon.ico]" does not match against value "/gitBooks/100/abc/favicon.ico"
2020-02-04 22:57:35.703 TRACE 28356 --- [ctor-http-nio-2] o.s.c.g.h.RoutePredicateHandlerMapping   : No RouteDefinition found for [Exchange: GET http://localhost:8080/gitBooks/100/abc/favicon.ico]

我不明白,我想知道如何编写路径谓词以匹配路径结束与favicon.ico

我不知道为什么 PathMatcher 不起作用,最后我写了一个自定义的谓词:

spring:
cloud:
gateway:
routes:
- id: favicon
uri: forward:///favicon.ico
predicates:
- Favicon=
@Component
public class FaviconRoutePredicateFactory extends AbstractRoutePredicateFactory<FaviconRoutePredicateFactory.Config> {
private static final Log log = LogFactory.getLog(FaviconRoutePredicateFactory.class);

public FaviconRoutePredicateFactory() {
super(Config.class);
}
@Override
public Predicate<ServerWebExchange> apply(Config config) {
return exchange -> {
String path = exchange.getRequest().getURI().getRawPath();
return !path.equals("/favicon.ico") && path.endsWith("favicon.ico");
};
}
public static class Config {
}
}

最新更新