【问题标题】:The graceful way to handle filters depending on the request url or routing service id根据请求 url 或路由服务 id 处理过滤器的优雅方式
【发布时间】:2017-06-12 09:06:06
【问题描述】:

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

常识是把请求的url用斜杠分割,得到确切的接口,然后和预设的url列表进行比较,有没有其他办法?

【问题讨论】:

    标签: spring-cloud netflix-zuul


    【解决方案1】:

    您可以在过滤器的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
    猜你喜欢
    • 1970-01-01
    • 2015-03-04
    • 2021-01-30
    • 2015-11-17
    • 2015-05-15
    • 2021-12-18
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    相关资源
    最近更新 更多