1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| private static final Logger logger = LoggerFactory.getLogger(RoutingDelegate.class);
public ResponseEntity<String> redirect(HttpServletRequest request, HttpServletResponse response,String routeUrl, String prefix) { try { // build up the redirect URL String redirectUrl = createRedictUrl(request,routeUrl, prefix); RequestEntity requestEntity = createRequestEntity(request, redirectUrl); return route(requestEntity); } catch (Exception e) { logger.error("处理异常:{}",e.getLocalizedMessage(),e); return new ResponseEntity("REDIRECT ERROR", HttpStatus.INTERNAL_SERVER_ERROR); } }
private String createRedictUrl(HttpServletRequest request, String routeUrl, String prefix) { String queryString = request.getQueryString(); return routeUrl + request.getRequestURI().replace(prefix, "") + (queryString != null ? "?" + queryString : ""); }
private RequestEntity createRequestEntity(HttpServletRequest request, String url) throws URISyntaxException, IOException { String method = request.getMethod(); HttpMethod httpMethod = HttpMethod.resolve(method); MultiValueMap<String, String> headers = parseRequestHeader(request); byte[] body = parseRequestBody(request); return new RequestEntity<>(body, headers, httpMethod, new URI(url)); }
private ResponseEntity route(RequestEntity requestEntity) { RestTemplate restTemplate = new RestTemplate(); // 乱码处理 // List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters(); // for (HttpMessageConverter<?> messageConverter : messageConverters) { // if (messageConverter instanceof StringHttpMessageConverter) { // ((StringHttpMessageConverter) messageConverter).setDefaultCharset(StandardCharsets.UTF_8); // } // } return restTemplate.exchange(requestEntity, Resource.class); }
private byte[] parseRequestBody(HttpServletRequest request) throws IOException { InputStream inputStream = request.getInputStream(); return StreamUtils.copyToByteArray(inputStream); }
private MultiValueMap<String, String> parseRequestHeader(HttpServletRequest request) { HttpHeaders headers = new HttpHeaders(); List<String> headerNames = Collections.list(request.getHeaderNames()); for (String headerName : headerNames) { List<String> headerValues = Collections.list(request.getHeaders(headerName)); for (String headerValue : headerValues) { headers.add(headerName, headerValue); } } return headers; }
|