2010-08-29 29 views
5

En mis griales solicitud, he implementado la interfaz HttpSessionListener para escuchar creación de la sesión como se indica a continuación:¿Cómo obtener la dirección IP cuando se crea una sesión?

class MyHttpSessionListener implements HttpSessionListener { 

    public void sessionCreated(HttpSessionEvent event) { 
     log.info "***************** Session created: id= ${event.getSession()?.id}" 
    } 
} 

Ahora, me gustaría ingrese la dirección IP que es responsable de la creación de la sesión .

¿Cómo puedo hacer eso?

Respuesta

6

puede acceder a la RequestContextHolder y obtener el valor

String ipAddr = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()) 
      .getRequest().getRemoteAddr(); 
+0

Muchas gracias. Funciona como un amuleto – fabien7474

+6

Podría mencionar que esto es parte del marco de Spring. Estas clases no son parte de la especificación JSF. – Mindwin

2

Por lo que sé, no puede usar la interfaz HttpSessionListener.

Puede obtener y registrar la dirección IP desde "ServletRequest.getRemoteAddr()" pero no tiene acceso a la solicitud de servlet desde HttpSessionListener o desde HttpSessionEvent.

La mejor idea sería tener un javax.servlet.Filter que obtenga la dirección IP y la configure como un atributo de sesión si no está presente. (También podría hacer el registro si no está presente).

+0

Gracias por la punta sobre el ajuste del valor de la sesión, como 'HttpSession' es la única instancia disponible dentro de un 'HttpSessionListener'. – asgs

2

También puede utilizar esta interfaz en su HttpSessionListener: ServletRequestListener Puede implementar: requestInitialized() como este.

@Override 
public void requestInitialized(ServletRequestEvent servletRequestEvent) { 
    this.request = (HttpServletRequest) servletRequestEvent.getServletRequest(); 
} 

que está funcionando bien, el objeto de solicitud se puede lograr que el dirección remota, existe un método para hacer eso

Cuestiones relacionadas