java - Spring Cloud Zuul : Apply filter only to specific route

标签 java spring spring-cloud netflix-zuul spring-cloud-netflix

我正在使用 Spring Cloud 的 Zuul 将一些 API 请求代理到一些外部服务器。代理本身运行良好,但每个服务都需要在请求 header 中提供一个(不同的) token 。

我已经为应用适当 header 的每个标记成功编写了一个简单的预过滤器。但是,我现在有一个问题。即使在阅读文档之后,我也无法弄清楚如何使每个过滤器仅适用于正确的路线。我不想执行 url 匹配,因为 url 会在不同环境中发生变化。理想情况下,我有一些方法可以获取过滤器中的路由名称。

我的应用程序.yml:

zuul:
  routes:
    foo:
      path: /foo/**
      url: https://fooserver.com
    bar:
      path: /bar/**
      url: https://barserver.com

理想情况下,我想在 FooFilter.java(预过滤器)中做这样的事情:

public bool shouldFilter() {
    return RequestContext.getCurrentContext().getRouteName().equals("foo");
}

但我似乎找不到任何方法来做到这一点。

最佳答案

您可以在 RequestContext 中使用 proxy header 来区分路由服务器,如下所示。如果您使用的是功能区,您还可以使用 serviceId header 。但是如果你像上面的例子那样指定 url direclty,你应该使用 proxy header 。您必须知道的一件事是 proxy header 设置在 PreDecorationFilter 中,因此您的预过滤器必须具有比 PreDecorationFilter< 的值更大的过滤器顺序值 有(此时为5)

@Override
public int filterOrder() {
    return 10;
}

@Override
public boolean shouldFilter() {
    RequestContext ctx = RequestContext.getCurrentContext();

    if ((ctx.get("proxy") != null) && ctx.get("proxy").equals("foo")) {
        return true;
    }
    return false;
}

关于java - Spring Cloud Zuul : Apply filter only to specific route,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43285205/

相关文章:

java - Bean 验证 API

spring-cloud - 使用 Spring Cloud Stream 通过 Confluent Schema Registry 生成 Avro 消息

java - parseInt 导致 android 应用程序崩溃

java - 组织.hibernate.boot.MappingNotFoundException : Mapping (RESOURCE) not found

java - 在 Java 中从方法中抛出异常记录参数值的简单方法

java - Maven多模块项目添加Axis2导致的依赖冲突如何解决

mysql - ConstraintViolationException 未显示约束名称 MySQL

java - 如何在 JPA 中回滚事务?

java - Spring Cloud Gateway 和容错

在 Feign Client 中不支持 Spring Data Pageable 作为 RequestParam