ZuulFilter总结

zuulFilter使用总结

pre:可以在请求被路由之前调用
route:在路由请求时候被调用
post:在route和error过滤器之后被调用
error:处理请求时发生错误时被调用

一、拦截request请求,对请求进行修改(pre/route)
1.修改url地址

        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request
        String uri = request.getRequestURI();
        LOG.info("=======old uri: "+uri);
        uri += "";
        ctx.put(FilterConstants.REQUEST_URI_KEY, uri);
        LOG.info("=======new uri: "+ctx.getRequest().getRequestURI());

2.修改get请求参数

        RequestContext ctx = RequestContext.getCurrentContext();
        Map<String, List<String>> requestQueryParams = ctx.getRequestQueryParams();
        if (requestQueryParams==null) {
            requestQueryParams=new HashMap<>();
        }
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("value");
        requestQueryParams.put("key", arrayList);
        ctx.setRequestQueryParams(requestQueryParams);

3.修改post请求参数

        try{
            ServletInputStream inputStream = ctx.getRequest().getInputStream();
            String params = StreamUtils.copyToString(inputStream, Charset.forName("UTF-8"));
            LOG.info("======原先参数为: "+params);
            JsonObject jsonObject = new JsonParser().parse(params).getAsJsonObject();
            jsonObject.addProperty("key","value");
            String newParam = new Gson().toJson(jsonObject).toString();
            ctx.setRequest(new HttpServletRequestWrapper(ctx.getRequest()) {
                @Override
                public ServletInputStream getInputStream(){
                    return new ServletInputStreamWrapper(newParam.getBytes());
                }
                @Override
                public int getContentLength() {
                    return newParam.getBytes().length;
                }
                @Override
                public long getContentLengthLong() {
                    return newParam.getBytes().length;
                }
            });
            LOG.info("======修改后的参数为: "+StreamUtils.copyToString(ctx.getRequest().getInputStream(), Charset.forName("UTF-8")));
        } catch (Exception e) {
            e.printStackTrace();
        }

二、拦截response请求,修改响应参数(post)

    try {
        InputStream stream = ctx.getResponseDataStream();
        String body = StreamUtils.copyToString(stream, Charset.forName("UTF-8"));
        JsonObject resObject = new JsonParser().parse(body).getAsJsonObject();
        if(resObject.has("error")){
            resObject.addProperty("code",-1);
        }else{
            resObject.addProperty("code",1);
        }
        String newBody = resObject.toString();
        ctx.setResponseBody(newBody);
        LOG.info("====返回结果:"+ctx.getResponseBody());
    }catch (Exception e){
        e.printStackTrace();
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值