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