【问题标题】:Can we use HTTPMethod in Zuul Route Configuration?我们可以在 Zuul 路由配置中使用 HTTPMethod 吗?
【发布时间】:2015-12-06 05:34:09
【问题描述】:

对 /app/login 的 POST 请求应重定向到 http://abc:100/app/login,对 /app/login 的 DELETE 请求应重定向到 http://xyz:200/app/login。这如何在 Netflix Zuul 路由配置中实现?有没有选项可以在路由配置中提及http方法?

这里是解释我们场景的条目。

zuul:
  routes:
    Login:
      path: /app/login
      url: http://abc:100/app/login


    Logout:
      path: /app/login
      url: http://xyz:200/app/login

【问题讨论】:

  • 使用此配置是否有任何错误?
  • 没有错误,两个请求都只被重定向到第一个 URL。
  • 你将两个不同的 URL 绑定到同一个路径,所以这种行为并不奇怪。

标签: netflix netflix-zuul


【解决方案1】:

更新:spring-cloud-netflix 不会通过简单的配置开箱即用地执行此操作,但实际上添加自定义 ZuulFilter 来满足您的需要很容易。见How do you you create custom Zuul filters in Spring Cloud?

我认为这样的事情应该适合你:

@Component
public class MyCustomZuulFilter extends ZuulFilter {

    private urlPathHelper = new UrlPathHelper();

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        final String requestURI = 
            this.urlPathHelper.getPathWithinApplication(ctx.getRequest());

        if ("/app/login".equals(requestURI)
            && ctx.getRequest() != null
            && !StringUtils.isBlank(ctx.getRequest().getMethod())) {

            if ("DELETE".equals(ctx.getRequest().getMethod().toUpperCase())) {
                ctx.set("serviceId", "XYZ-SVC");
                ctx.setRouteHost(null);
                ctx.addOriginResponseHeader("X-Zuul-ServiceId", location);
            } else if ("POST".equals(ctx.getRequest().getMethod().toUpperCase())) {
                ctx.set("serviceId", "ABC-SVC");
                ctx.setRouteHost(null);
                ctx.addOriginResponseHeader("X-Zuul-ServiceId", location);
            }
        }
        return null;
    }
}

请注意,根据您的设置,您可能仍需要将 /app/login 映射到现有服务的 Zuul 规则,因为捆绑的 PreDecorationFilter 会自动将无法识别的路由设置为“forward.to”。

我的用例一模一样,不过Zuul目前好像不能基于HTTP方式进行路由。

有问题的代码在ProxyRouteLocator#getMatchingRoute 方法中。它遍历定义的 ZuulRoute 条目以查找匹配的路由。不幸的是,#getMatchingRoute 中的逻辑和 ZuulRoute 的属性在 HTTP 方法上似乎不匹配。

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2017-12-23
    • 2017-11-25
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多