ДЖЕРСИ: Как получить вызывающий IP или URI с помощью аннотации инъекции?

У меня есть REST-сервер, использующий JERSEY. Я должен зарегистрировать IP (лучше DNS) вызывающего клиента.

Может ли кто-нибудь указать направление, какие аннотации для инъекций использовать?

Искал "@Context", но ничего подходящего не нашел.

Спасибо, Герд.


person user1226230    schedule 29.02.2012    source источник


Ответы (3)


вы можете добавить @Context HttpServletRequest request в качестве параметра к методу обработчика запросов. А затем получите IP-адрес клиента с помощью request.getRemoteAddr()

person rompetroll    schedule 29.02.2012
comment
RemoteUser возвращает значение null для меня, но RemoteHost и RemoteAddr работают по плану - person bobtheowl2; 05.09.2012
comment
Я попробовал решение, но получил несоответствие типа: невозможно преобразовать из контекста в аннотацию. Как я могу это решить? - person Greenhand; 19.10.2013
comment
@JeffreyLin трудно сказать издалека :) Может быть, вы импортировали другой класс Context? убедитесь, что у вас есть import javax.ws.rs.core.Context - person rompetroll; 19.10.2013
comment
@rompetroll Большое спасибо! - person Greenhand; 19.10.2013

Если вы используете комбинацию Grizzly-Jersey, сделайте это следующим образом:

@Context
private java.lang.ThreadLocal<org.glassfish.grizzly.http.server.Request> grizzlyRequest;
person Dima Gutzeit    schedule 22.05.2015

Вариант 2 для комбинации гризли-джерси. Поместите в объявление класса (расширитель ContainerRequestFilter в моем случае)

 @Inject
 private javax.inject.Provider<org.glassfish.grizzly.http.server.Request> request;

и позже в коде используйте это.

request.get().getRemoteAddr()

Я копался и нашел разрешение в jira футболки. Обратите внимание, что они рекомендуют использовать @Inject вместо @Context

я пытался использовать

  @Context
  private HttpServletRequest servletRequest;

который рекомендуется широко, но servletRequest всегда был нулевым.

* комментарий servletRequest был нулевым, потому что я использовал GrizzlyHttpServerFactory для создания HttpServer. Если вы хотите иметь servletRequest, вам нужно развернуть его с помощью WebappContext. Посмотрите здесь подробности

person osoitza    schedule 14.12.2016