Атрибуты Jetty Request не распространяются между службами

Служба A перенаправляет запросы в службу 2, используя АсинкПроксиСервлет, но атрибуты, установленные в запросе службой A, недоступны в запросе после того, как он достигает службы B. Атрибуты запроса сервлета не сохраняются при вызовах HTTP? Может ли кто-нибудь помочь мне понять, что происходит?

public class ForwardServlet extends AsyncProxyServlet
{
  //Service A
...
@Override
  protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  {
...
request.setAttribute("FOO", "BAR"); // This attribute is missing in Service B
    super.service(request, response);// Send to service B
}
}
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
0
15
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Атрибуты запроса сервлета являются частью спецификации сервлета и представляют собой способ хранения значений в одной цепочке диспетчеризации в одном контейнере сервлета.

Эти значения не существуют как часть какой-либо спецификации протокола HTTP и не могут быть отправлены через новые HTTP-запросы.

Отправка в терминах сервлета означает...

  1. входящий HTTP-запрос был проанализирован
  2. объект HttpServletRequest был создан
  3. цепочка вызовов адресата Servlet определена из комбинации Filter и Servleturl-patterns
  4. отправка происходит первому Filter в цепочке
  5. каждый фильтр и конечный сервлет назначения может добавлять/изменять атрибуты запроса
  6. каждый фильтр или сервлет также может получить RequestDispatcher в .forward(req, resp) или .include(req, resp) ту же отправку в новое место в том же контейнере сервлетов.

Если ваша служба B находится в том же контейнере сервлетов, используйте RequestDispatcher, и ваши атрибуты запроса появятся вместе с вами.

Если ваша служба B находится на другом сервере, вам нужно выяснить, как передать эти атрибуты на целевой сервер, используя либо протокол HTTP (возможно, в виде заголовков запроса?), либо внутри содержимого вашего запроса (в виде значений JSON? )

Другие вопросы по теме