简体   繁体   中英

JERSEY: How to retrieve the calling IP or URI using injection annotation?

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 ?

Searched "@Context", but could not find anything fitting.

Thanks Gerd

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()

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;

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM