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