2010-09-29 16 views
17

Estoy escribiendo un servicio web Java Rest y necesito la dirección IP de la persona que llama. Creí haber visto esto en la cookie una vez, pero ahora no lo veo. ¿Hay un lugar consistente para obtener esta información?Descanso: cómo obtener la dirección IP de la persona que llama

Vi un ejemplo de utilizar un "OperationalContext" para obtenerlo, pero no estaba en Java.

+0

Bienvenido a SO. Creo que necesita agregar etiquetas Java para ganar audiencia. Esto no está realmente relacionado con REST. –

+0

Quizás no directamente relacionado con el descanso, pero ciertamente relacionado con los servicios web (del que tampoco sé mucho), ¿no es así? ¿No sería un servicio de descanso/servicio web saber la dirección IP del cliente web que envía su servicio? – Wanderer

+0

Primera pregunta, ¿cómo está creando su aplicación RESTful? Con Servlets, alguna biblioteca, etc. –

Respuesta

11

Creo que puede obtener la IP a través del objeto de solicitud.

Si no me equivoco, request.getRemoteAddr() o menos.

+0

Tal vez me falta algo, pero no tengo un objeto de solicitud. Este es un servicio web reposado de JAX-RS. Tengo acceso a un objeto de contexto Solicitud, pero eso no tiene un método getRemoteAddr() y parece estar relacionado con "Obtiene condicional" ... cualquiera que sean. – Wanderer

+4

Hm ... ¿no puedes hacer algo como @Context HttpServletRequest request y luego usar este objeto request.getRemoteAddr()? – kukudas

1

Suponiendo que está haciendo su "servicio web" con servlets, el método más simple llamada .getRemoteAddr() en el objeto de solicitud le dará la dirección IP de la persona que llama.

+0

oh, fuiste más rápido :) – kukudas

+0

No servlets, pero Restful Web Services (diferente, ¿no?) .. y no tengo un objeto que tenga un método getremoteAddr(). – Wanderer

30

inyectar un HttpServletRequest en su resto servicio como tal:

import javax.servlet.http.HttpServletRequest; 

@GET 
@Path("/yourservice") 
@Produces("text/xml") 
public String activate(@Context HttpServletRequest requestContext,@Context SecurityContext context){ 

    String ipAddressRequestCameFrom = requestContext.getRemoteAddr(); 

    //Also if security is enabled 
    Principal principal = context.getUserPrincipal(); 
    String userName = principal.getName(); 

} 
+3

'requestContext.getRemoteAddr()' será suficiente (sin 'toString()') –

4

se podría hacer algo como esto:

@WebService 
public class YourService { 

    @Resource 
    WebServiceContext webServiceContext; 

    @WebMethod 
    public String myMethod() { 

     MessageContext messageContext = webServiceContext.getMessageContext(); 
     HttpServletRequest request = (HttpServletRequest) messageContext.get(MessageContext.SERVLET_REQUEST); 
     String callerIpAddress = request.getRemoteAddr(); 

     System.out.println("Caller IP = " + callerIpAddress); 

    } 
} 
Cuestiones relacionadas