【发布时间】:2017-06-12 09:06:06
【问题描述】:
我需要确定所请求的 API 是否应由特定过滤器过滤?
常识是把请求的url用斜杠分割,得到确切的接口,然后和预设的url列表进行比较,有没有其他办法?
【问题讨论】:
我需要确定所请求的 API 是否应由特定过滤器过滤?
常识是把请求的url用斜杠分割,得到确切的接口,然后和预设的url列表进行比较,有没有其他办法?
【问题讨论】:
您可以在过滤器的RequestContext 中使用serviceId 属性,并在过滤器的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;
}
你应该知道的一件事是,如果你指定 url 本身而不是使用 eureka,你应该在 RequestContext 中使用 proxy 属性而不是 serviceId。
【讨论】:
proxy,但你应该使用RequestContext.getRouteHost() 方法来获取完整的url,而不是serviceId。