I have a REST- Server here using JERSEY. I must log the IP (better the DNS) of the calling client.
Can somebody point a direction which injection annotations to use ?
In case you use Grizzly-Jersey combo, thats the way to do it:
@Context
private java.lang.ThreadLocal<org.glassfish.grizzly.http.server.Request> grizzlyRequest;
you could add @Context HttpServletRequest request
as a parameter to your request handler method. And then get a hold of the client IP with request.getRemoteAddr()
Option 2 for Grizzly-Jersey combo. Place in the declaration of the class (extender of ContainerRequestFilter in my case)
@Inject
private javax.inject.Provider<org.glassfish.grizzly.http.server.Request> request;
and later in the code use this.
request.get().getRemoteAddr()
I dug around and I've found the resolution in the jersey's jira. Note that they recommend to be used @Inject instead of @Context
I've tried to use
@Context
private HttpServletRequest servletRequest;
which is recommended widely but servletRequest was always null.
*comment servletRequest was null because I was used GrizzlyHttpServerFactory for creating HttpServer. If you want to have servletRequest then you need to deploy it with WebappContext. Take a look here for details