当前位置: 首页 > 知识库问答 >
问题:

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

柯永福
2023-03-14

在下面的spring cloud gateway配置中,我试图用/favicon.ico匹配路径结束,但它不能匹配路径:/gitbooks/100/abc/favicon.ico

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

spring cloud gateway打印以下日志

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]

共有1个答案

左丘修齐
2023-03-14

我不知道为什么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 {
    }
}
 类似资料:
  • Spring Cloud Greenwich将Spring Cloud netflix zuul置于维护模式,因此我正在尝试从zuul迁移到Spring Cloud Gateway。 和Zuul一起我有一条路 我所做的基本上是忽略接收路径中主计划之前或之后的所有内容,并重定向到api主计划。例如,和都指向同一个api(原因是是一个较大实体的子资源,该实体负责创建新的,但是可以将视为完整的资源,用于

  • 我正在使用3.1.0版本的Spring Cloud Gateway,我需要帮助来检查和修复我的路由配置的路径谓词过滤器。 我试图在路径之间使用正则表达式,路由在我的配置中看起来像这样: 虽然这是一个有效的正则表达式,但我收到了路径请求的404错误代码: /random/path/12/update 因此,我需要帮助来找出这个usecase的正确配置。

  • 我试图将使用工作的网关迁移到Spring Cloud网关,但遇到了请求路由问题。 下面是Spring Cloud Gateway配置的一个片段,我试图在其中配置一个等效的路由: 我使用Spring Cloud Eureka作为我的Discovery服务器(在一个单独的微服务中),并且我目前没有任何配置,如配置DiscoveryClient路由的谓词和过滤器中所述 如果我向发出请求,我将收到一个40

  • 我已经用Eureka发现服务实现了Spring Cloud Gateway,一切都很好,但我看到了一些我在编写URL时不知道如何处理的事情,如果我没有在URL的末尾放一个/,Gateway会直接使用其实际URL(在Eureka注册)重定向到应用程序。 例如: https://example.com/bar重定向到应用程序URL(http://example.app.url.com:8010/bar

  • Tango支持4种形式的路由匹配规则 静态路由 tg.Get("/", new(Action)) tg.Get("/static", new(Action))匹配 URL:/ 到 Action结构体的Get函数 匹配 URL:/static 到 Action结构体的Get函数 命名路由 tg.Get("/:name", new(Action)) tg.Get("/(:name)", new(Act

  • 我正在将我的应用程序从webphere迁移到jboss EAP 7.1.0,但我收到了以下错误。 错误: