Estou tentando configurar um bean com escopo de solicitação no Spring.
Eu configurei com sucesso para que o bean seja criado uma vez por solicitação. Agora, ele precisa acessar o objeto HttpServletRequest.
Como o bean é criado uma vez por solicitação, eu acho que o contêiner pode injetar facilmente o objeto de solicitação em meu bean. Como eu posso fazer isso ?
O Spring expõe o
HttpServletRequest
objeto atual (assim como oHttpSession
objeto atual ) por meio de um objeto wrapper do tipoServletRequestAttributes
. Este objeto wrapper está vinculado a ThreadLocal e é obtido chamando ostatic
métodoRequestContextHolder.currentRequestAttributes()
.ServletRequestAttributes
fornece o métodogetRequest()
para obter a solicitação atual,getSession()
para obter a sessão atual e outros métodos para obter os atributos armazenados em ambos os escopos. O código a seguir, embora um pouco feio, deve fornecer o objeto de solicitação atual em qualquer lugar do aplicativo:Observe que o
RequestContextHolder.currentRequestAttributes()
método retorna uma interface e precisa ser convertido paraServletRequestAttributes
que implemente a interface.Spring Javadoc: RequestContextHolder | ServletRequestAttributes
fonte
Conforme sugerido aqui, você também pode injetar o
HttpServletRequest
parâmetro como um método, por exemplo:fonte