需求:接口提供方,在我们系统内提交接口,我们生成虚拟接口路径。接口使用人调用我们系统内的虚拟接口我们转发给接口提供方,然后将接口提供方的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);
}