2010-09-02 4 views
7

Ho un bean spring singleton che viene richiamato in risposta a un'azione client. Desidero acquisire alcune informazioni sul client (in particolare l'indirizzo IP). Presumo che la migliore fonte di queste informazioni sia l'oggetto della richiesta. Come ottengo l'accesso all'oggetto richiesta dall'interno del mio bean?Come accedere a una ServletRequest dall'interno di un bean spring singleton?

Perdonami se questa è una domanda ovvia, sono molto nuovo per la primavera.

Ho provato una cosa senza successo .:

((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()) 
.getRequest().getRemoteAddr(); 

Ma che non è riuscito con un'IllegalStateException fuori currentRequestAttributes. Il testo fa eccezione suggerisce di utilizzare un RequestContextListener o RequestContextFilter

ho trovato un reference per come configurare il RequestContextListener, ma io ancora non so di cambiare il mio fagioli in modo da poter accedere alle informazioni richiesta.

risposta

7

RequestContextListener aggiunto a web.xml e questo associerà la richiesta corrente con il thread corrente. Questa associazione di thread viene quindi recuperata tramite RequestContextHolder nel modo in cui hai già provato.

Quindi, solo schiaffo RequestContextListener in web.xml, e il codice deve solo iniziare a lavorare:

<listener> 
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
</listener> 

RequestContextListener non è normalmente richiesto in applicazioni Spring MVC, dal momento che DispatcherServlet lo farà automaticamente. Presumo che questa non sia un'app di Spring MVC?

+0

Perfetto, questo ha funzionato! Ho appena avuto il nome di RequestContextListener nel web.xml. Cosa fa la richiesta Destroyed (ServletRequestEvent) .attributes? – wolfcastle

+0

Corretto, questa non è un'app MVC di primavera. Scusa, non l'ho visto la prima volta che ho letto la tua risposta. – wolfcastle

Problemi correlati