Переслать запрос с помощью SpringbootJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Переслать запрос с помощью Springboot

Сообщение Anonymous »


Из-за строгой политики использования файлов cookie в браузере Safari я не могу вызвать интерфейс exalple2.com на странице домена exalple1.com. Теперь я хочу решить эту проблему, пробросив бэкенд, то есть все запросы на странице отправляются на exalple1.com. Если страница хочет вызвать интерфейс exalple2.com/user/mine, страница может быть exalple1.com/exalple2-api/user/mine, серверная часть пересылает ее на exalple2.com/user/mine и возвращает результат. значение, полученное из exalple2.com/user/mine, во внешний интерфейс. Все параметры, передаваемые страницей при запросе http://example1.com/example2-api/user/mine, должны быть переданы на http://example2.com/user/mine в том виде, в каком они есть, например параметры на тело или URL-адрес или заголовок запроса. Есть ли у вас идеи реализовать эту функцию через перехватчик? Большое спасибо за помощь!

Я попытался повторно создать HTTP-запрос, используя информацию, полученную запросом, и отправить его с помощью RestTemplate, но ответ искажен.
import org.springframework.http.HttpMethod; импортировать org.springframework.http.ResponseEntity; импортировать org.springframework.stereotype.Component; импортировать org.springframework.web.client.RestTemplate; импортировать org.springframework.web.servlet.HandlerInterceptor; импортировать org.springframework.web.servlet.ModelAndView; импортировать javax.servlet.http.HttpServletRequest; импортировать javax.servlet.http.HttpServletResponse; @Компонент публичный класс ForwardInterceptor реализует HandlerInterceptor { частный RestTemplate restTemplate; public ForwardInterceptor (RestTemplate restTemplate) { this.restTemplate = restTemplate; } @Override public boolean preHandle (запрос HttpServletRequest, ответ HttpServletResponse, обработчик объекта) выдает исключение { // URL-адрес URL-адреса URL-адреса. Строка originalUrl = request.getRequestURI(); Строка originalMethod = request.getMethod(); String originalBody = request.getReader().lines().collect(Collectors.joining(System.lineSeparator())); HttpHeaders originalHeaders = новые HttpHeaders(); Enumeration headerNames = request.getHeaderNames(); в то время как (headerNames.hasMoreElements()) { Строка headerName = headerNames.nextElement(); Строка headerValue = request.getHeader(headerName); originalHeaders.add(headerName, headerValue); } // URL-адрес URL-адреса URL-адреса Строка впередUrl = «http://example2.com» + originalUrl; // 创建转发请求 RequestEntity requestEntity = новый RequestEntity(originalBody, originalHeaders, HttpMethod.valueOf(originalMethod), URI.create(forwardUrl)); // 发送转发请求 ResponseEntity responseEntity = restTemplate.exchange(requestEntity, String.class); // 将转发请求的响应设置到原始响应中 response.setStatus(responseEntity.getStatusCodeValue()); response.setContentType(responseEntity.getHeaders().getContentType().toString()); response.getWriter().write(responseEntity.getBody()); вернуть ложь; // 停止后续处理 } @Override public void postHandle (запрос HttpServletRequest, ответ HttpServletResponse, обработчик объекта, ModelAndView modelAndView) выдает исключение { // 在请求处理完成后的操作 } @Override public void afterCompletion (запрос HttpServletRequest, ответ HttpServletResponse, обработчик объекта, исключение ex) выдает исключение { // 在请求完成后的操作 } }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»