2010-09-29 7 views
17

Я пишу веб-службу Java Rest и нуждаюсь в IP-адресе вызывающего. Я думал, что видел это в cookie один раз, но теперь я этого не вижу. Есть ли постоянное место для получения этой информации?Rest - как получить IP-адрес вызывающего абонента

Я видел один пример использования «OperationalContext», чтобы получить его, но это не было в java.

+0

Добро пожаловать на SO. Я думаю, вам нужно добавить Java-теги, чтобы получить аудиторию - это не относится к REST –

+0

Возможно, не напрямую Отдых связан, но, конечно же, связанные с веб-сервисами (о чем я мало что знаю), не так ли? Разве это не будет проблемой отдыха/веб-сервиса, чтобы знать IP-адрес веб-клиента, который вызывает вашу услугу? – Wanderer

+0

Первый вопрос, как вы создаете приложение RESTful? С сервлетами, некоторыми библиотеками и т. Д.? –

ответ

11

Я думаю, вы можете получить IP через объект запроса.

Если я не ошибаюсь, request.getRemoteAddr() или около того.

+0

Возможно, что-то у меня отсутствует, но у меня нет объекта запроса. Это веб-сервис JAX-RS Restful. У меня есть доступ к объекту контекста запроса, но у него нет метода getRemoteAddr() и, похоже, он связан с «условным набором» ... независимо от того, что есть. – Wanderer

+4

Хм .. вы не можете сделать что-то вроде @Context HttpServletRequest запроса, а затем использовать этот объект request.getRemoteAddr()? – kukudas

1

Предполагая, что вы делаете свой «веб-сервис» с сервлетами, довольно простой метод вызова .getRemoteAddr() на объект запроса даст вам IP-адрес вызывающего абонента.

+0

oh вы были быстрее :) – kukudas

+0

Не сервлеты, но Restful Web Services (разные, правда?) .. и у меня нет объекта с методом getremoteAddr(). – Wanderer

30

Подайте HttpServletRequest в вашей службе отдых как таковой:

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()' будет достаточно (без 'toString()') –

4

Вы могли бы сделать что-то вроде этого:

@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); 

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