Spring Cloud Zuul:仅对特定路径应用过滤器

时间:2017-04-07 18:50:11

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

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

我已成功为每个应用适当标头的令牌编写了一个简单的预过滤器。但是,我现在有一个问题。即使在完成文档后,我也无法弄清楚如何使每个过滤器仅适用于正确的路径。我不想在网址随环境变化时执行网址匹配。理想情况下,我可以通过某种方式获取过滤器中路径的名称。

我的application.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");
}

但我似乎无法找到任何办法。

1 个答案:

答案 0 :(得分:16)

您可以使用oceanIcons <- iconList( Rank1 = makeIcon("23-1.png", "ferry-18@2x.png", 36, 36), Rank2= makeIcon("23-2.png", "danger-24@2x.png", 36, 36), Rank3= makeIcon("23-3.png", "danger-24@2x.png", 36, 36), Rank4= makeIcon("23-4.png", "danger-24@2x.png", 36, 36), Rank5= makeIcon("23-5.png", "danger-24@2x.png", 36, 36), Rank0= makeIcon("circle2.png", "danger-24@2x.png", 48, 48) ) map = leaflet(map_df) %>% addTiles() %>% addMarkers(icon = ~oceanIcons[map_df$rank], popup=sprintf("<strong> %s <br>Expected Volume of Bike Departures: %s </br> Distance in Miles: %s <br> %s</br></strong>" ,map_df$st_name,map_df$outbound,map_df$distance, map_df$rank))%>% addProviderTiles(providers$CartoDB.Positron) 中的proxy标头来区分路由服务器,如下所示。如果您使用功能区,则还可以使用RequestContext标题。但是,如果您在示例上方指定了url direclty,则应使用serviceId标头。您必须知道的一件事是proxy标头设置在proxy中,因此您的预过滤器必须具有比PreDecorationFilter具有的值更大的过滤器顺序值(它是5 at at这一刻)。

PreDecorationFilter