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


Estoy tratando de configurar un frijol con alcance de solicitud en primavera.

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 ?


75
2017-07-23 17:16


origen


Respuestas:


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

private @Autowired HttpServletRequest request;

81
2017-07-24 07:27



Spring expone la corriente HttpServletRequest objeto (así como la corriente HttpSession objeto) a través de un envoltura objeto de tipo ServletRequestAttributes. Este objeto contenedor está vinculado a ThreadLocal y se obtiene llamando al static método 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 RequestContextHolder.currentRequestAttributes() El método devuelve una interfaz y debe escribirse en ServletRequestAttributes que implementa la interfaz.


Spring Javadoc:  RequestContextHolder | ServletRequestAttributes


110
2017-07-24 01:00