zuul修改request query param
发布日期:2021-08-27 07:03:25 浏览次数:2 分类:技术文章

本文共 3682 字,大约阅读时间需要 12 分钟。

SimpleHostRoutingFilter

@Override    public Object run() {        RequestContext context = RequestContext.getCurrentContext();        HttpServletRequest request = context.getRequest();        MultiValueMap
headers = this.helper .buildZuulRequestHeaders(request); MultiValueMap
params = this.helper .buildZuulRequestQueryParams(request); String verb = getVerb(request); InputStream requestEntity = getRequestBody(request); if (request.getContentLength() < 0) { context.setChunkedRequestBody(); } String uri = this.helper.buildZuulRequestURI(request); this.helper.addIgnoredHeaders(); try { HttpResponse response = forward(this.httpClient, verb, uri, request, headers, params, requestEntity); setResponse(response); } catch (Exception ex) { context.set(ERROR_STATUS_CODE, HttpServletResponse.SC_INTERNAL_SERVER_ERROR); context.set("error.exception", ex); } return null; }

重点关注

MultiValueMap
params = this.helper .buildZuulRequestQueryParams(request);

在ProxyRequestHelper类里头

public MultiValueMap
buildZuulRequestQueryParams( HttpServletRequest request) { Map
> map = HTTPRequestUtils.getInstance().getQueryParams(); MultiValueMap
params = new LinkedMultiValueMap<>(); if (map == null) { return params; } for (String key : map.keySet()) { for (String value : map.get(key)) { params.add(key, value); } } return params; }

再看com/netflix/zuul/util/HTTPRequestUtils.java

public Map
> getQueryParams() { Map
> qp = RequestContext.getCurrentContext().getRequestQueryParams(); if (qp != null) return qp; HttpServletRequest request = RequestContext.getCurrentContext().getRequest(); qp = new HashMap
>(); if (request.getQueryString() == null) return null; StringTokenizer st = new StringTokenizer(request.getQueryString(), "&"); int i; while (st.hasMoreTokens()) { String s = st.nextToken(); i = s.indexOf("="); if (i > 0 && s.length() >= i + 1) { String name = s.substring(0, i); String value = s.substring(i + 1); try { name = URLDecoder.decode(name, "UTF-8"); } catch (Exception e) { } try { value = URLDecoder.decode(value, "UTF-8"); } catch (Exception e) { } List
valueList = qp.get(name); if (valueList == null) { valueList = new LinkedList
(); qp.put(name, valueList); } valueList.add(value); } else if (i == -1) { String name=s; String value=""; try { name = URLDecoder.decode(name, "UTF-8"); } catch (Exception e) { } List
valueList = qp.get(name); if (valueList == null) { valueList = new LinkedList
(); qp.put(name, valueList); } valueList.add(value); } } RequestContext.getCurrentContext().setRequestQueryParams(qp); return qp; }

这里优先取了RequestContext.getCurrentContext().getRequestQueryParams();

因此,对于url路由的服务来说,可以修改context的queryParam来达到修改请求参数的目的。


想获取最新内容,请关注微信公众号

图片描述

转载地址:https://blog.csdn.net/weixin_33910434/article/details/89055533 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Vue2.0 探索之路——vue-router入门教程和总结
下一篇:C语言 字符串处理函数

发表评论

最新留言

不错!
[***.144.177.141]2024年04月17日 23时33分19秒