2012-07-26 17 views
10

estoy usando siguiente código para obtener la dirección IP del cliente para una JAX-WS de una vía llamada al método:manera confiable para obtener la dirección IP del cliente en CXF JAX-WS de una vía llamada al método

protected HttpServletRequest getServletRequest() { 
    MessageContext ctx = wsContext.getMessageContext(); 
    return (HttpServletRequest) ctx.get(MessageContext.SERVLET_REQUEST); 
} 

protected synchronized String getClientIp() { 
    String clientIp = ""; 
    HttpServletRequest request = getServletRequest(); 
    if (request != null) { 
     clientIp = request.getRemoteAddr(); 

     // Handle proxy 
     String header = request.getHeader("x-forwarded-for"); 
     if(header != null && !header.isEmpty()) { 
      clientIp = header.split(",")[0]; 
     } 
    } 
    return clientIp; 
} 

Cuando se conectan múltiples clientes, la dirección IP recuperada para una solicitud ocasionalmente es un valor incorrecto en caché de una solicitud anterior. ¿Cuál es una forma confiable de obtener la dirección IP del originador de llamada unidireccional?

Respuesta

18

puede utilizar el fragmento de código de seguimiento de encontrar la IP del cliente

Message message = PhaseInterceptorChain.getCurrentMessage(); 
HttpServletRequest request = (HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST); 
request.getRemoteAddr() 
1

Si su propósito es establecer una conexión de servicio web en ese entonces quizás WS-Addressing puede ser útil.

Esquemas de direccionamiento alternativos a un lado, HttpServletRequest.getRemoteAddr en combinación con la dirección IP alternativa getHeader están especificados para ser correctos. Si no lo son, entonces no hay mucho recurso (sí, puedo imaginar varias contorsiones, pero el principio permanece).

Entonces, ¿tiene la versión estable más reciente/mejor de su plataforma? Suena más como un problema con su plataforma, de la que no ha proporcionado ningún detalle.

+0

Voy a mirar a través de WS-Addressing si puede ayudar. Estoy usando cxf-2.5.2 ejecutándose en tomcat-6.0.35. – amo

Cuestiones relacionadas