2009-10-29 1 views
20

Я использую JAX-WS, и у меня возникают проблемы с получением клиентской информации, которая потребляет веб-сервис. Я узнал, как это сделать с JAX-RPC и Apache Tomcat Axis, но не с JAX-WS. Кто-нибудь имеет представление об этом?Geting IP-адрес клиента Для веб-службы

ответ

47

Что об этом:

@WebService 
public class MyService { 

    @Resource 
    WebServiceContext wsContext; 

    /** 
    * Web service operation 
    */ 
    @WebMethod 
    public String myMethod() { 

    MessageContext mc = wsContext.getMessageContext(); 
    HttpServletRequest req = (HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST); 
    System.out.println("Client IP = " + req.getRemoteAddr()); 

    } 

} 
+2

Я думаю, что я просто пропустил аннотацию @Resource. – monksy

+0

Насколько я знаю, это лучшее описание того, как это сделать на всей широкой сети. ;) Спасибо, Паскаль! – Zakum

+0

Я стараюсь, но размер mc 22 и «запрос» имеет значение NULL. Я не понимаю, почему, у вас есть идея? – luffy

4

Или это:

 
@Path("terminal") 
public class terminal { 
    @Context private javax.servlet.http.HttpServletRequest hsr; 
    @GET 
    @Path("get_ip") 
    @Produces("text/plain") 
    public String get_ip() 
    { 
      return ip = hsr.getRemoteAddr(); 
    } 
} 
+0

Не относится ли это только к REST? – Koekiebox

2

Принимая огромный и оценил намек от зайна и Даррен ответа/редактирования, я попробовал это, и это тоже работает.

@GET 
@Produces(MediaType.TEXT_PLAIN) 
@Path("ip") 
public String sayIP(@Context HttpServletRequest req, @QueryParam("p1") String p1, ...) { 
    return req.getRemoteAddr(); 
} 
0
public String getIp(@Context HttpServletRequest req) { 
    return req.getRemoteHost(); 
} 
+0

@ Контекст не может быть идентифицирован, и импорт не предлагается, что это точно? –

+0

@ объединенное выражение, https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/core/Context.html, https://jersey.java.net/documentation/ последняя/jaxrs-resources.html –

Смежные вопросы