Wie finde ich die IP-Adresse einer eingehenden RESTful-Anfrage mit JAX-RS auf Heroku?

Ich Schreibe ein Java-RESTful-Dienst, gehostet auf Heroku basiert auf einem Beispiel -> https://api.heroku.com/myapps/template-java-jaxrs/clone

Meine sample-service:

package com.example.services;

import com.example.models.Time;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/time")
@Produces(MediaType.APPLICATION_JSON)
public class TimeService {

    @GET
    public Time get() {
        return new Time();
    }

}

Mein main ist:

public class Main {

    public static final String BASE_URI = getBaseURI();

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
        final Map<String, String> initParams = new HashMap<String, String>();
        initParams.put("com.sun.jersey.config.property.packages","services.contracts"); 

        System.out.println("Starting grizzly...");
        SelectorThread threadSelector = GrizzlyWebContainerFactory.create(BASE_URI, initParams);
        System.out.println(String.format("Jersey started with WADL available at %sapplication.wadl.",BASE_URI, BASE_URI));
    }

    private static String getBaseURI() 
    {
        return "http://localhost:"+(System.getenv("PORT")!=null?System.getenv("PORT"):"9998")+"/";      
    }

}

Meine Frage ist wie kann ich herausfinden, in meinem Dienst die IP-Adresse und port-Kombination) die Anforderung aus? Ich habe Sachen gelesen, die auf @Kontext, die injiziert javax.ws.rs.core.HttpHeaders, javax.ws.rs.core.Anfrage, etc. Jedoch keine eingehenden IP-oder port-info vorhanden ist.

Ich wissen, ob Sie implementieren von com.Sonne.grizzly.tcp.Adapter, die Sie tun können, so etwas wie:

public static void main(String[] args) {
    SelectorThread st = new SelectorThread();
    st.setPort(8282);
    st.setAdapter(new EmbeddedServer());
    try {
        st.initEndpoint();
        st.startEndpoint();
    } catch (Exception e) {
        System.out.println("Exception in SelectorThread: " + e);
    } finally {
        if (st.isRunning()) {
            st.stopEndpoint();
        }
    }
}

public void service(Request request, Response response)
        throws Exception {
    String requestURI = request.requestURI().toString();

    System.out.println("New incoming request with URI: " + requestURI);
    System.out.println("Request Method is: " + request.method());

    if (request.method().toString().equalsIgnoreCase("GET")) {
        response.setStatus(HttpURLConnection.HTTP_OK);
        byte[] bytes = "Here is my response text".getBytes();

        ByteChunk chunk = new ByteChunk();
        response.setContentLength(bytes.length);
        response.setContentType("text/plain");
        chunk.append(bytes, 0, bytes.length);
        OutputBuffer buffer = response.getOutputBuffer();
        buffer.doWrite(chunk, response);
        response.finish();
    }
}

public void afterService(Request request, Response response)
        throws Exception {
    request.recycle();
    response.recycle();
}

und Zugang

    request.remoteAddr()

Aber ich würde mich wirklich trennen mögen meine RESTful-API in einer stärker strukturierten Weise wie in meiner ersten Umsetzung.

Jegliche Hilfe würde sehr geschätzt werden. Danke!

InformationsquelleAutor der Frage Luke | 2012-11-01

Schreibe einen Kommentar