Для краткости запрос HttpServletRequest — это API сервлетов, который предоставляет объект для получения информации HTTP-запроса, инициированного клиентом.

Например:

  1. Получить параметры запроса
  2. Получить заголовок запроса
  3. Получить информацию о сеансе
  4. Получите IP-адрес запроса и другую информацию

Итак, вопрос в том, каковы методы получения объекта Request в Spring Boot?

Существует три распространенных способа получения объектов Request:

  1. Получение объекта Request через параметры запроса;
  2. Получение объекта Request через RequestContextHolder;
  3. Получение объекта Request посредством автоматического внедрения.

Давайте исследуем это немного дальше.

1 . Получение по параметру запроса

@RequestMapping("/")
@ResponseBody
public void index(HttpServletRequest request){
  // do something
}

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

2. Получение через RequestContextHolder

@RequestMapping("/")
@ResponseBody
public void index(){
 ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
 HttpServletRequest request = servletRequestAttributes.getRequest();
 // do something
}

В Spring Boot RequestContextHolder — это класс инструментов, предоставляемый Spring Framework для хранения и доступа к информации о контексте запроса, связанной с текущим потоком в многопоточной среде.

В основном он используется для хранения информации о текущем запросе в рамках потока, чтобы эту информацию можно было использовать и использовать в различных компонентах, особенно если никакие параметры не передаются напрямую.
Основные роли RequestContextHolder — следующий:

  1. В веб-приложениях каждый запрос…