Я пытаюсь настроить компонент с ограниченным объемом запроса весной.
Я успешно настроил его, поэтому компонент создается один раз для каждого запроса. Теперь ему нужно получить доступ к объекту HttpServletRequest.
Поскольку компонент создается один раз за запрос, я полагаю, что контейнер может легко внедрить объект запроса в мой компонент. Как я могу это сделать ?
Spring предоставляет текущий
HttpServletRequest
объект (а также текущийHttpSession
объект) через объект- оболочку типаServletRequestAttributes
. Этот объект-оболочка привязан к ThreadLocal и получается путем вызоваstatic
методаRequestContextHolder.currentRequestAttributes()
.ServletRequestAttributes
предоставляет методgetRequest()
для получения текущего запроса,getSession()
для получения текущего сеанса и других методов для получения атрибутов, хранящихся в обеих областях. Следующий код, хотя и немного уродливый, должен предоставить вам текущий объект запроса в любом месте приложения:Обратите внимание, что
RequestContextHolder.currentRequestAttributes()
метод возвращает интерфейс и должен иметь типServletRequestAttributes
, реализующий интерфейс.Spring Javadoc: RequestContextHolder | ServletRequestAttributes
источник
Как предлагается здесь, вы также можете ввести
HttpServletRequest
как параметр метода, например:источник