ДЖЕРСИ: Как получить вызывающий IP или URI, используя аннотацию инъекции? - PullRequest
11 голосов
/ 29 февраля 2012

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

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

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

Спасибо Герд

Ответы [ 3 ]

24 голосов
/ 29 февраля 2012

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

3 голосов
/ 22 мая 2015

Если вы используете комбо Гризли-Джерси, вот способ сделать это:

@Context
private java.lang.ThreadLocal<org.glassfish.grizzly.http.server.Request> grizzlyRequest;
1 голос
/ 14 декабря 2016

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

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

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

request.get().getRemoteAddr()

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

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

  @Context
  private HttpServletRequest servletRequest;

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...