2010-09-29 38 views
17

Tôi đang viết một dịch vụ web Java Rest và cần Địa chỉ IP của người gọi. Tôi nghĩ rằng tôi đã thấy điều này trong cookie một lần nhưng bây giờ tôi không nhìn thấy nó. Có một nơi nhất quán để nhận thông tin này không?Phần còn lại - cách nhận địa chỉ IP của người gọi

Tôi đã xem một ví dụ về việc sử dụng "OperationalContext" để tải xuống nhưng không có trong java.

+0

Chào mừng bạn đến SO. Tôi nghĩ rằng bạn cần thêm các thẻ Java để có được một đối tượng - điều này không thực sự liên quan đến REST –

+0

Có thể không trực tiếp Phần còn lại liên quan, nhưng chắc chắn các dịch vụ web liên quan (mà tôi không biết nhiều về một trong hai), phải không? Nó sẽ không được một phần còn lại/dịch vụ web mối quan tâm để biết địa chỉ IP của khách hàng web mà envoke dịch vụ của bạn? – Wanderer

+0

Câu hỏi đầu tiên, bạn tạo ứng dụng RESTful như thế nào? Với Servlets, một số thư viện, v.v ...? –

Trả lời

11

Tôi nghĩ bạn có thể nhận IP thông qua đối tượng yêu cầu.

Nếu tôi không nhầm, request.getRemoteAddr() hoặc hơn.

+0

Có lẽ tôi đang thiếu một cái gì đó, nhưng tôi không có một đối tượng yêu cầu. Đây là dịch vụ Web Restful JAX-RS. Tôi có quyền truy cập vào một đối tượng yêu cầu bối cảnh, nhưng điều đó không có một phương thức getRemoteAddr() và dường như liên quan đến "điều kiện Gets" ... bất kể đó là gì. – Wanderer

+4

Hm .. bạn không thể làm điều gì đó như @Context HttpServletRequest yêu cầu và sau đó sử dụng đối tượng này request.getRemoteAddr()? – kukudas

1

Giả sử bạn đang tạo "dịch vụ web" với servlet, phương thức gọi đơn giản là .getRemoteAddr() trên đối tượng yêu cầu sẽ cung cấp cho bạn địa chỉ IP của người gọi.

+0

oh bạn đã nhanh hơn :) – kukudas

+0

Không phải servlet, nhưng Restful Web Services (khác nhau, phải không?) .. và tôi không có đối tượng có phương thức getremoteAddr(). – Wanderer

30

Tiêm một HttpServletRequest vào dịch vụ nghỉ ngơi của bạn như vậy:

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()' sẽ đủ (không có 'toString()') –

4

Bạn có thể làm một cái gì đó như thế này:

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

    } 
} 
Các vấn đề liên quan