修改 Zuul 过滤器中的查询参数
Modify query params in a Zuul filter
我正在尝试创建一个过滤器 ("pre", 50),如果这些参数不存在,它将向请求添加默认查询参数。
到目前为止,我的工作基于以下组合:
创建新请求:
http://www.ocpsoft.org/opensource/how-to-safely-add-modify-servlet-request-parameter-values/
在 RequestContext 对象中设置新请求:
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,但它似乎也不起作用。
有什么想法吗?
您必须创建添加到请求的自定义路由过滤器。
看看RibbonRoutingFilter 的代码,它根据传入的请求创建一个新的请求,然后将新的请求路由到服务。它也与查询 Params 一起玩,这可能会帮助您指导您如何向它添加更多参数。
见SendResponseFilter.getQueryString()
并创建新过滤器 SendResponseFilter.java ,编辑 getQueryString()。
并设置:
zuul.SimpleHostRoutingFilter.route.disable=真
我以前遇到过这个问题,请按照以下方法处理:
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);
我正在尝试创建一个过滤器 ("pre", 50),如果这些参数不存在,它将向请求添加默认查询参数。
到目前为止,我的工作基于以下组合:
创建新请求: http://www.ocpsoft.org/opensource/how-to-safely-add-modify-servlet-request-parameter-values/
在 RequestContext 对象中设置新请求:
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,但它似乎也不起作用。
有什么想法吗?
您必须创建添加到请求的自定义路由过滤器。
看看RibbonRoutingFilter 的代码,它根据传入的请求创建一个新的请求,然后将新的请求路由到服务。它也与查询 Params 一起玩,这可能会帮助您指导您如何向它添加更多参数。
见SendResponseFilter.getQueryString() 并创建新过滤器 SendResponseFilter.java ,编辑 getQueryString()。 并设置: zuul.SimpleHostRoutingFilter.route.disable=真
我以前遇到过这个问题,请按照以下方法处理:
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);