Ich versuche, im Frühjahr eine Bean mit Anforderungsbereich einzurichten .
Ich habe es erfolgreich eingerichtet, sodass die Bean einmal pro Anfrage erstellt wird. Jetzt muss es auf das HttpServletRequest-Objekt zugreifen.
Da die Bean einmal pro Anforderung erstellt wird, kann der Container das Anforderungsobjekt problemlos in meine Bean einfügen. Wie kann ich das machen ?
Spring macht das aktuelle
HttpServletRequest
Objekt (sowie das aktuelleHttpSession
Objekt) durch ein Wrapper- Objekt vom Typ verfügbarServletRequestAttributes
. Dieses Wrapper-Objekt ist an ThreadLocal gebunden und wird durch Aufrufen derstatic
Methode abgerufenRequestContextHolder.currentRequestAttributes()
.ServletRequestAttributes
Bietet die MethodegetRequest()
zum Abrufen der aktuellen Anforderung,getSession()
zum Abrufen der aktuellen Sitzung und andere Methoden zum Abrufen der in beiden Bereichen gespeicherten Attribute. Der folgende Code ist zwar etwas hässlich, sollte Ihnen jedoch das aktuelle Anforderungsobjekt an einer beliebigen Stelle in der Anwendung anzeigen:Beachten Sie, dass die
RequestContextHolder.currentRequestAttributes()
Methode eine Schnittstelle zurückgibt und typisiert werden mussServletRequestAttributes
, um die Schnittstelle zu implementieren.Spring Javadoc: RequestContextHolder | ServletRequestAttributes
quelle
Wie hier vorgeschlagen , können Sie auch den
HttpServletRequest
Parameter als Methode injizieren, z.quelle