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