2016-04-27 7 views
1

Ich versuche, die IP-Adresse abrufen, die den Anruf zu einem REST-Anruf macht.Jersey Remote-IP-Adresse funktioniert nicht richtig

Der Code, den ich habe, ist:

import javax.servlet.http.HttpServletRequest; 
import javax.ws.rs.*; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.MediaType; 

import org.json.JSONObject; 

@Path("/api") 
public class Endpoints { 

    @GET 
    @Path("/whoami") 
    @Produces(MediaType.APPLICATION_JSON) 
    public String testHeaders(@Context final HttpServletRequest request){ 

     final JSONObject json = new JSONObject(); 
     json.put("remoteaddr", request.getRemoteAddr()); 

     return json.toString(4); 
    } 

} 

die Anwendung im Einsatz auf Heroku here. Wenn Sie den Anruf an die API machen, gibt es die IP ist: 10.155.0.152, wie auch immer, wenn ich es google es sagt meine IP-Adresse ist etwas anderes. Gibt es eine Möglichkeit, die tatsächliche IP zurückzugeben?

Antwort

1

Heroku setzt eine Anzahl von , die diese Art von Informationen enthalten. In Ihrem Fall sollten Sie:

request.getHeader("X-Forwarded-For"); 

Dies wird die ursprüngliche IP-Adresse des Clients eine Verbindung mit dem Router Heroku zurückzukehren.

Die IP-Adresse, die Sie von request.getRemoteAddr() erhalten, ist wahrscheinlich der Heroku-Router.