У меня есть перехватчик @AroundInvoke REST Web Service, который я бы хотел использовать для регистрации общих данных, таких как класс и метод, удаленный IP-адрес и время отклика.JEE6 REST Service @AroundInvoke Interceptor вводит нулевой объект HttpServletRequest
Получение имени класса и метода простым использованием InvocationContext, а удаленный IP-адрес доступен через HttpServletRequest, если перехват службы Rest включает в себя список @Context HttpServletRequest в списке параметров.
Однако некоторые методы REST не имеют HttpServletRequest в своих параметрах, и я не могу понять, как получить объект HttpServletRequest в этих случаях.
Например, следующий REST веб-службы не имеет параметр @Context HttpServletRequest
@Inject
@Default
private MemberManager memberManager;
@POST
@Path("/add")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Member add(NewMember member) throws MemberInvalidException {
return memberManager.add(member);
}
Я попытался впрыскиванием прямо в мой перехватчик, но (на JBoss 6.1) всегда нулевой ...
public class RestLoggedInterceptorImpl implements Serializable {
@Context
HttpServletRequest req;
@AroundInvoke
public Object aroundInvoke(InvocationContext ic) throws Exception {
logger.info(req.getRemoteAddr()); // <- this throws NPE as req is always null
...
return ic.proceed();
Я хотел бы совет надежного способа получить доступ к HttpServletRequest объекта - или даже просто HTTP-заголовки ... независимо от того, служба REST, включает ли параметр.
ли это означает, что вы должны включать в себя @Context HttpServletRequest параметр в каждом методе REST вашего приложения? Это должен быть лучший способ. Я довольно новичок в Java EE6, и я борюсь с очень похожей, если не той же проблемой. Я написал здесь вопрос, он не спрашивает то же самое, но это сводится к следующему: мне нужно проверить сеанс на перехватчике, чтобы выполнить авторизацию. http://stackoverflow.com/questions/19453557/injection-to-an-interceptor-whats-missing – noinstance
@nosuchnick Я также подумал: «Должен быть лучший способ», поэтому я задал вопрос. Кажется, это один из тех немногих раздражающих JEE6, где добавление перехватчика требует изменений шаблонов к перехваченному коду. –
Несомненно. Я закончил все управление сеансом в компоненте '@ SessionScoped' и ввел его в перехватчик. Затем я могу использовать его методы. – noinstance