根据请求URL或路由服务ID处理过滤器的优雅方式

时间:2017-06-12 09:06:07

标签: spring-cloud netflix-zuul

我需要确定是否应该通过特定过滤器过滤请求的API?

常识是将请求网址拆分为斜线以获取准确的界面,然后将其与预设的网址列表进行比较,还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

您可以在过滤器中serviceId使用RequestContext属性,并在过滤器的shouldFilter()方法中查看,如下所示。如果您的过滤器为pre过滤器,则过滤器顺序的值必须大于PreDecorationFilater的值。目前它是5.

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

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

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

您应该知道的一件事是,如果您指定的是网址而不是使用eureka,则应使用proxy中的RequestContext属性而不是serviceId