2010-09-02 8 views
7

Tengo un bean de primavera singleton que se invoca en respuesta a alguna acción del lado del cliente. Deseo capturar cierta información sobre el cliente (específicamente la dirección IP). Supongo que la mejor fuente de esta información es el objeto de solicitud. ¿Cómo obtengo acceso al objeto de solicitud desde dentro de mi bean?¿Cómo acceder a ServletRequest desde dentro de un bean de primavera singleton?

Perdóname si esta es una pregunta obvia, soy muy nuevo en Spring.

He intentado sin éxito una cosa .:

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

Pero eso falló con un IllegalStateException de currentRequestAttributes. El texto de la excepción sugiere utilizar un RequestContextListener o RequestContextFilter

He encontrado un reference a cómo configurar el RequestContextListener, pero todavía no sé a cambiar mi frijol para que pueda acceder a la información de la solicitud.

Respuesta

7

RequestContextListener se agrega a web.xml, y esto asociará la solicitud actual con la secuencia actual. Esta asociación de subprocesos se recupera a través de RequestContextHolder de la manera que ya lo ha intentado.

lo tanto, sólo una palmada en RequestContextListenerweb.xml, y su código sólo debe empezar a trabajar:

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

RequestContextListener Normalmente no es necesario en aplicaciones Spring MVC, ya DispatcherServlet lo hará automáticamente. ¿Asumo que esta no es una aplicación Spring MVC?

+0

¡Perfecto, esto funcionó! Acabo de tener el nombre de RequestContextListener en el web.xml. ¿Qué hace el requestDestroyed (ServletRequestEvent) .attributes hacer? – wolfcastle

+0

Correcto, esta no es una aplicación Spring MVC. Lo siento, no lo vi la primera vez que leí tu respuesta. – wolfcastle

Cuestiones relacionadas