spring boot转发HttpServletRequest到其他服务器,做到用户无感知接口代理转发

需求:接口提供方,在我们系统内提交接口,我们生成虚拟接口路径。接口使用人调用我们系统内的虚拟接口我们转发给接口提供方,然后将接口提供方的response 返回给接口使用方。可以保护接口提供方的接口地址不会暴露。


    public Object sendRequest(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String jwtToken = request.getHeader("apiToken");
        String jwtToken2 = request.getHeader("Authorization");
        if (EmptyUtils.isEmpty(jwtToken)&&EmptyUtils.isEmpty(jwtToken2)) {
            return null;
        }
        String path="/java"+request.getServletPath();
        DeveloperOpenapi api=developerOpenapiService.lambdaQuery().eq(DeveloperOpenapi::getPath,path).one();
        if(EmptyUtils.isEmpty(api)){
            return  null;
        }
        String realPath=api.getRealPath();
        String realHost=api.getRealHost();
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        String urlString=realHost+realPath;
        String httpType=request.getMethod();
        MultiValueMap<String,String> parmMap= new LinkedMultiValueMap<String, String>();
        Enumeration<String> a = request.getParameterNames();
        String parm=null;
        String val="";
        while(a.hasMoreElements()){
            //参数名
            parm=a.nextElement();
            //值
            val=request.getParameter(parm);
            parmMap.add(parm, val);
        }
        RestTemplate client = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        Enumeration headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String key = (String) headerNames.nextElement();
            String value = request.getHeader(key);
            headers.add(key, value);
        }
        //  请勿轻易改变此提交方式,大部分的情况下,提交方式都是表单提交
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(parmMap, headers);
        //  执行HTTP请求
        //  执行HTTP请求
        ResponseEntity<String> response2 =client.exchange(urlString, HttpMethod.resolve(httpType), requestEntity, String.class);
        //  输出结果
        String body=response2.getBody();

        return JSON.parse(body);
    }
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值