修改Zuul过滤器中的查询参数

时间:2016-06-03 21:42:38

标签: java spring-boot netflix-zuul

我正在尝试创建一个过滤器(“pre”,50),如果这些参数不存在,它们会将默认查询参数添加到请求中。

到目前为止,我的工作基于:

要创建新请求: http://www.ocpsoft.org/opensource/how-to-safely-add-modify-servlet-request-parameter-values/

在RequestContext对象中设置新请求: How to pass modified/wrapped HTTPServletRequest to subsequent Zuul Filters?

Map<String, String[]> extraParams = new TreeMap<String, String[]>();

if (!params.containsKey("language")) {
    extraParams.put("language", new String[]{"en"});
    params.put("language", Arrays.asList("en"));
}
if (!params.containsKey("country")) {
    extraParams.put("country", new String[]{"us"});
    params.put("country", Arrays.asList("us"));
}

HttpServletRequest request = ctx.getRequest();
HttpServletRequest wrapped = new WrappedRequest(request, extraParams);
ctx.setRequest(wrapped);
ctx.setRequestQueryParams(params);

我还使用新的参数修改了RequestQueryParams,但它似乎也没有用。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

之前我遇到过这个问题,请按照以下方法进行:

    Map<String, List<String>> params = ctx.getRequestQueryParams();
    if (params == null) {
        params = Maps.newHashMap();
    }
    for (String key : checkMap.keySet()) {
        params.put(key, Lists.newArrayList(checkMap.get(key).toString()));
    }
    ctx.setRequestQueryParams(params);

答案 1 :(得分:0)

您必须创建一个添加到请求的自定义路由过滤器。

查看RibbonRoutingFilter的代码,它根据传入的请求创建一个新请求,然后将新请求路由到该服务。它也可以与查询Params一起使用,可以帮助您指导如何向其添加更多参数。

答案 2 :(得分:0)

请参阅SendResponseFilter.getQueryString() 并创建新的过滤器作为SendResponseFilter.java,编辑getQueryString()。 并设置: zuul.SimpleHostRoutingFilter.route.disable =真