SpringCloud Zuul网关在Filter中添加或修改Request参数
SpringCloud Zuul网关在Filter中添加或修改Request参数
使用目的
在网关中经常会处理一些Token或者鉴权信息,在处理完后,将Token处理后,把用户信息放到Request中,方便后续系统的时候。我这次使用的场景有些特别,由于项目需要兼容用户使用RequestBody 传递JSON参数,但是由于当前系统没有对RequestBody做兼容,导致数据获取不到,因此在Zuul中把参数处理完成后传递给后面的应用。
使用环境
1 | <parent> |
实现方式
- 在RequestContext中添加QueryParams
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17/**
* 设置参数给后续服务使用
* @param reqJson 请求的RequestBody参数
*/
private void setRequestContextParams(JSONObject reqJson) {
//设置参数 给后面的请求使用
RequestContext ctx = RequestContext.getCurrentContext();
Map<String, List<String>> params = new HashMap<>(16);
String strategyId = reqJson.getString(Constants.STRATEGY_ID);
params.put(Constants.SIGN, Collections.singletonList(sign));
params.put(Constants.CLIENT_ID, Collections.singletonList(clientId));
params.put(Constants.AUTHORIZATION, Collections.singletonList(userId));
params.put(Constants.STRATEGY_ID,Collections.singletonList(strategyId));
ctx.setRequestQueryParams(params);
} - 使用RequestContext的setRequest()使用RequestWrapper将当前的Request更新掉
这个没有编写代码,大概流程如下- 编写一个类继承HttpServletRequestWrapper(request)
- 重写其中的方法,将自己想要的实现放置进去
- 设置到RequestContext中去