Заголовок не может быть извлечен из HttpServletRequest - PullRequest
1 голос
/ 31 марта 2019

Я работаю над микросервисной архитектурой. У меня есть 3 разных приложения с другим доменным именем. Предположим, что приложение 1 имеет API:

 "/app/foo-bar"

Этот API вызывается из некоторого сервиса приложения 2, сервис также запускается некоторым API. Этот API также можно вызвать из приложения 3.

Теперь мне нужно, чтобы при вызове API в приложении 1 я хотел выяснить, из какого приложения он вызывался. (доменное имя приложения 2 или приложения 3)

Я пробовал это:

request.getHeader("referer");

Но это возвращает меня к нулю

Есть ли способ решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 31 марта 2019

Вы должны установить заголовок во время вызова API. Также вы должны получить заголовок в этом API для происхождения вызывающего абонента.

SET заголовок во время вызова API : app/foo-bar

RestTemplate restTemplate = new RestTemplate();

HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("referer", "APP_1");

HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);

Получить заголовок в API

@RequestMapping(value = "/app/foo-bar")
    public String serveRest(@RequestBody String body, @RequestHeader HttpHeaders headers) {


        List<String> parameters = headers.get("parameters");

        String referer = null;
        for (String header : parameters) {
            if (header.equals("referer")) {
                referer = header;
            }
        }
        System.out.println(referer);

        return referer;
    }

Вот импорт :

import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
2 голосов
/ 31 марта 2019

Вам необходимо добавить заголовок referer в исходное приложение (приложение 2 или приложение 3 в вашем примере), чтобы включить его в запрос HttpRequest.

Другой способ получения исходного узла упомянут здесь: Получить URL отправителя запроса с помощью HttpServletRequest

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...