iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何通过zuul添加或修改请求参数
  • 751
分享到

如何通过zuul添加或修改请求参数

2024-04-02 19:04:59 751人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

zuul添加或修改请求参数 一、为什么要用到这个 在基于 SpringCloud 构建的微服务系统中,通常使用网关zuul来进行一些用户验证等过滤的操作,比如 用户在 header

zuul添加或修改请求参数

一、为什么要用到这个

在基于 SpringCloud 构建的微服务系统中,通常使用网关zuul来进行一些用户验证等过滤的操作,比如 用户在 header 或者 url 参数中存放了 token ,网关层需要 用该 token 查出用户 的 userId ,并存放于 request 中,以便后续微服务可以直接使用而避免再去用 token 查询。

二、基础知识

在 zuul 中最大的用法的除了路由之外,就是过滤器了,自定义过滤器需实现接口 ZuulFilter ,在 run() 方法中,可以用


RequestContext ctx = RequestContext.getCurrentContext();
httpservletRequest request = ctx.getRequest();

获取到 request,但是在 request 中只有 getParameter() 而没有 setParameter() 方法,所以直接修改 url 参数不可行,另外在 reqeust 中虽然可以使用 setAttribute() ,但是可能由于作用域的不同,在这里设置的 attribute 在后续的微服务中是获取不到的,因此必须考虑另外的方式。

三、具体做法

最后确定的可行的方法是,用


ctx.setRequest(new HttpServletRequestWrapper(request) {})

的方式,重新构造上下文中的 request ,代码如下:


// 例如在请求参数中添加 userId
try {
  InputStream in = ctx.getRequest().getInputStream();
  String body = StreamUtils.copyToString(in, Charset.forName("UTF-8"));
  if(StringUtils.isBlank(body)){
    body = "{}";
  }
  JSONObject jsonObject = JSON.parseObject(body);
  jsonObject.put("userId", 666);
  String newBody = jsonObject.toString();
  final byte[] reqBodyBytes = newBody.getBytes();
  ctx.setRequest(new HttpServletRequestWrapper(request){    
    @Override
    public ServletInputStream getInputStream() throws ioException {
      return new ServletInputStreamWrapper(reqBodyBytes);
    }
    @Override
    public int getContentLength() {
      return reqBodyBytes.length;
    }
    @Override
    public long getContentLengthLong() {
      return reqBodyBytes.length;
    }
  });
} catch (IOException e) {
  e.printStackTrace();
}

思路就是,获取请求的输入流,并重写,即重写json参数。

在后续的微服务的 controller 中,通过下面的方式获取通过zuul添加或修改的请求参数。


InputStream in = request().getInputStream();
String body = StreamUtils.copyToString(in, Charset.forName("UTF-8"));
if(StringUtils.isNotBlank(body)){
  JSONObject jsonObject = JSON.parseObject(body);
  Object userId = jsonObject.get("userId");
}

zuul修改请求url

除了修改请求参数、设置响应header,响应body外,还有一种需求就是url重新,或者是修改url,这里简述一下怎么在zuul修改url。

转发配置


demo:
  ribbon:
    NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
    listOfServers: 192.168.99.100,192.168.99.101
zuul:
  routes:
    demo:
      path: /demo/**
      stripPrefix: true
      serviceId: demo

filter配置


@Component
public class UrlPathFilter extends ZuulFilter{
    @Override
    public String filterType() {
        return FilterConstants.PRE_TYPE;
    }
    @Override
    public int filterOrder() {
        return FilterConstants.PRE_DECORATION_FILTER_ORDER + 1;
    }
    @Override
    public boolean shouldFilter() {
        final String serviceId = (String) RequestContext.getCurrentContext().get("proxy");
        return "demo".equals(serviceId);
    }
    @Override
    public Object run() {
        RequestContext context = RequestContext.getCurrentContext();
        Object originalRequestPath = context.get(FilterConstants.REQUEST_URI_KEY);
        //http://localhost:10000/demo/list/data
        //-->/api/prefix/list/data
        String modifiedRequestPath = "/api/prefix" + originalRequestPath;
        context.put(FilterConstants.REQUEST_URI_KEY, modifiedRequestPath);
        return null;
    }
}

这样就大功告成了!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 如何通过zuul添加或修改请求参数

本文链接: https://www.lsjlt.com/news/131209.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何通过zuul添加或修改请求参数
    zuul添加或修改请求参数 一、为什么要用到这个 在基于 springcloud 构建的微服务系统中,通常使用网关zuul来进行一些用户验证等过滤的操作,比如 用户在 header ...
    99+
    2022-11-12
  • 怎么通过zuul添加或修改请求参数
    这篇文章主要为大家展示了“怎么通过zuul添加或修改请求参数”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么通过zuul添加或修改请求参数”这篇文章吧。zuul添加或修改请求参数一、为什么要用...
    99+
    2023-06-20
  • SpringAOP如何修改请求参数列表
    目录SpringAOP修改请求参数列表SpringAOP获取参数名参数值总结SpringAOP修改请求参数列表 如题,今天遇到了一个问题,要批量在前端请求之后修改其中的一个参数值。 ...
    99+
    2023-03-07
    SpringAOP请求参数 SpringAOP参数 SpringAOP请求参数列表
  • Android WebView通过动态的修改js去拦截post请求参数实例
    需求背景: 需要在用户点击提交按钮的时候拦截用户提交的数据。 遇到的问题: 1.页面不是自家前端做的,不能修改网页中的代码 2.要拦截的请求不是get请求,而是一个post请求...
    99+
    2022-06-06
    参数 post请求 webview 动态 js post Android
  • Linux系统如何通过grub添加内核参数
    这篇文章给大家介绍Linux系统如何通过grub添加内核参数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Linux内核在启动时我们可以为其提供各种参数来自定义内核的默认行为,内核参数应在内核启动时通过引导装载程序,如...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作