Spring: ¿cómo puedo inyectar un HttpServletRequest en un bean con ámbito de solicitud?

Estoy tratando de configurar un frijol con scope de solicitud en spring.

Lo configuré con éxito, por lo que el bean se crea una vez por solicitud. Ahora, necesita acceder al objeto HttpServletRequest.

Como el bean se crea una vez por solicitud, creo que el contenedor puede inyectar fácilmente el objeto de solicitud en mi bean. Cómo puedo hacer eso ?

Los beans con scope de solicitud se pueden autoconectar con el objeto de solicitud.

private @Autowired HttpServletRequest request; 

Spring expone el objeto HttpServletRequest actual (así como el objeto HttpSession actual) a través de un objeto contenedor de tipo ServletRequestAttributes . Este objeto contenedor está vinculado a ThreadLocal y se obtiene llamando al método static RequestContextHolder.currentRequestAttributes() .

ServletRequestAttributes proporciona el método getRequest() para obtener la solicitud actual, getSession() para obtener la sesión actual y otros métodos para obtener los atributos almacenados en ambos ámbitos. El siguiente código, aunque un poco feo, debe obtener el objeto de solicitud actual en cualquier lugar de la aplicación:

 HttpServletRequest curRequest = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()) .getRequest(); 

Tenga en cuenta que el método RequestContextHolder.currentRequestAttributes() devuelve una interfaz y debe ServletRequestAttributes en ServletRequestAttributes que implementa la interfaz.


Spring Javadoc: RequestContextHolder | ServletRequestAttributes