2010-09-29 17 views
17

Piszę usługę Java Rest Web Service i potrzebuję adresu IP dzwoniącego. Myślałem, że widziałem to raz w ciastku, ale teraz go nie widzę. Czy istnieje spójne miejsce na zdobycie tych informacji?Rest - jak uzyskać adres IP dzwoniącego

Widziałem jeden przykład użycia "OperationalContext", aby go uzyskać, ale to nie było w java.

+0

Witamy SO. Myślę, że musisz dodać tagi Java, aby zdobyć publiczność - to naprawdę nie jest związane z REST. –

+0

Może nie bezpośrednio Odpoczynek związany, ale na pewno związany z usługami internetowymi (o których nie wiem zbyt wiele), nieprawdaż? Czy nie byłoby problemem związanym z usługami rest/web znać adres IP klienta sieci, który zawiera usługę? – Wanderer

+0

Pierwsze pytanie, w jaki sposób tworzysz aplikację RESTful? Z Servlets, Some library, etc? –

Odpowiedz

11

Myślę, że możesz uzyskać IP poprzez obiekt żądania.

Jeśli się nie mylę, request.getRemoteAddr() lub coś w tym stylu.

+0

Może brakuje mi czegoś, ale nie mam obiektu żądania. To jest usługa sieciowa JAX-RS Restful. Mam dostęp do obiektu kontekstu żądania, ale to nie ma metody getRemoteAddr() i wydaje się być związane z "warunkowe Pobiera" ... cokolwiek to jest. – Wanderer

+4

Hm ... nie możesz zrobić czegoś takiego jak żądanie @Context HttpServletRequest, a następnie użyć tego obiektu request.getRemoteAddr()? – kukudas

1

Zakładając, że tworzysz "serwis internetowy" z serwletami, dość prosta metoda wywołania .getRemoteAddr() na obiekcie żądania da ci adres IP dzwoniącego.

+0

oh byłeś szybszy :) – kukudas

+0

Nie serwlety, ale Restful Web Services (różne, prawda?) .. i nie mam obiektu, który ma metodę getremoteAddr(). – Wanderer

30

wstrzyknąć do HttpServletRequest do swojej usługi rekreacyjne, takie jak:

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()' wystarczy (bez 'toString()') –

4

Można zrobić coś takiego:

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

    } 
} 
Powiązane problemy