Переадресация внутреннего вызова, включая обработку файлов cookie, в весенней загрузке

#java #spring-boot

Вопрос:

У меня есть контроллер spring boot rest (примечание: не контроллер MVC) с конечными точками. Клиент должен сначала позвонить одному из них, а затем сразу же позвонить второму.

Для этого второго звонка мне нужны файлы cookie, которые устанавливает первый.

Можно ли переадресовать вызов внутренне, но с включением файлов cookie, так же, как если бы клиент сделал два звонка.

Цель, конечно, состоит в том, чтобы сэкономить клиенту одну поездку туда и обратно.

Переписать код, чтобы просто пропустить вторые вызовы, невозможно, этот вопрос о возможности сократить клиент, не изменяя логику приложения.

Спасибо.

Комментарии:

1. Почему бы вам не позвонить второму контроллеру, например, с адресом RestTemplate и обратной связью? Вы все еще можете установить файл cookie в первом запросе (controller1 -> controller2), но не стандартным способом (например, установить файл cookie). Вы можете сделать это с помощью заголовка: httpHeaders.add(HttpHeaders.COOKIE, "key1=value1"); второй контроллер распознает его и создаст соответствующий javax.servlet.http. Объект cookie.

2. Таким образом, вы предлагаете фактически выполнить вызов из первого ресурса через клиент rest, вручную настроив все файлы cookie и пути. Это было не то, что я искал, но это, конечно, возможно.

3. да, именно так. Другой вариант-использовать HTTP Status Code = 302 , но это вызовет еще одну дополнительную поездку туда и обратно.

4. Да, и это накладывает определенные требования на клиента. Не все мои клиенты являются браузерами.

5. в этом случае я не вижу другого варианта, кроме как позвонить ему с помощью клиента rest. Дело в том, что каждый запрос, поступающий на ваш @RestController, должен идти, хотя FilterChain он заполняет все наши «причудливые» объекты, такие как безопасность, параметры и т. Д.. Я бы не рекомендовал вам избегать этих фильтров (так как ваш контроллер может быть выполнен в одиночку (в противном случае это не контроллер, а просто метод).. Если вам нужен фрагмент кода, я могу опубликовать его в качестве ответа (я попробовал, и это работает).