Estoy tratando de configurar un bean con ámbito de solicitud en Spring.
Lo configuré con éxito para que el bean se cree una vez por solicitud. Ahora, necesita acceder al objeto HttpServletRequest.
Dado que el bean se crea una vez por solicitud, me imagino que el contenedor puede inyectar fácilmente el objeto de solicitud en mi bean. Cómo puedo hacer eso ?
Spring expone el
HttpServletRequest
objeto actual (así como elHttpSession
objeto actual ) a través de un objeto contenedor de tipoServletRequestAttributes
. Este objeto contenedor está vinculado a ThreadLocal y se obtiene llamando alstatic
métodoRequestContextHolder.currentRequestAttributes()
.ServletRequestAttributes
proporciona el métodogetRequest()
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, debería llevarle el objeto de solicitud actual en cualquier lugar de la aplicación:Tenga en cuenta que el
RequestContextHolder.currentRequestAttributes()
método devuelve una interfaz y es necesario convertirlo en elServletRequestAttributes
que implementa la interfaz.Spring Javadoc: RequestContextHolder | ServletRequestAttributes
fuente
Como se sugiere aquí , también puede inyectar el parámetro
HttpServletRequest
como método, por ejemplo:fuente