Spring cloud 根据请求url或路由服务id处理筛选器的优雅方式

Spring cloud 根据请求url或路由服务id处理筛选器的优雅方式,spring-cloud,netflix-zuul,Spring Cloud,Netflix Zuul,我需要确定请求的API是否应该由特定的过滤器过滤 常识是用斜线分割请求url以获得准确的接口,然后将其与url列表预设进行比较,还有其他方法吗?您可以在过滤器中使用RequestContext中的serviceId属性,并在过滤器的shouldFilter()方法中检查它,类似于下面的方法。如果您的过滤器是prefilter,则其过滤器顺序的值必须大于predecorationfilter的值。目前是5 @Override public int filterOrder() { retur

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


常识是用斜线分割请求url以获得准确的接口,然后将其与url列表预设进行比较,还有其他方法吗?

您可以在过滤器中使用
RequestContext
中的
serviceId
属性,并在过滤器的
shouldFilter()
方法中检查它,类似于下面的方法。如果您的过滤器是
pre
filter,则其过滤器顺序的值必须大于
predecorationfilter
的值。目前是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;
}

您应该知道的一件事是,如果您指定的是url本身而不是使用eureka,那么您应该在
RequestContext
中使用
proxy
属性,而不是
serviceId

我不知道
proxy
,但是您应该使用
RequestContext.getRouteHost()
用于完整url的方法,而不是
serviceId