JERSEY: Как да извлека 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 се връща нулев за мен, но RemoteHost и RemoteAddr работят по план - person bobtheowl2; 05.09.2012
comment
Опитах решението, но получавам несъответствие на типа: не мога да преобразувам от контекст в анотация. Как мога да го реша? - person Greenhand; 19.10.2013
comment
@JeffreyLin е трудно да се каже отдалече :) Може би сте импортирали различен контекстен клас? уверете се, че имате 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 за комбинация Grizzly-Jersey. Поставете в декларацията на класа (разширител на ContainerRequestFilter в моя случай)

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

и по-късно в кода използвайте това.

request.get().getRemoteAddr()

Разрових се и намерих резолюцията в jira на фланелката. Имайте предвид, че те препоръчват да се използва @Inject вместо @Context

Опитах да използвам

  @Context
  private HttpServletRequest servletRequest;

което се препоръчва широко, но servletRequest винаги е било нула.

*comment servletRequest беше null, защото бях използван GrizzlyHttpServerFactory за създаване на HttpServer. Ако искате да имате servletRequest, тогава трябва да го внедрите с WebappContext. Погледнете тук за подробности

person osoitza    schedule 14.12.2016