Извлечь атрибуты запроса из запроса контейнера из Джерси
HttpServletRequest
имеет метод:
setAttribute
Как извлечь этот атрибут из ContainterRequest
?
Я не нашел: getAttribute
метод!
код
public class AuthenticationFilter implements Filter{
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpReq = (HttpServletRequest) servletRequest;
.... ....
httpReq.setAttribute("businessId", businessId);
}
}
В фильтре Джерси:
private class Filter implements ResourceFilter, ContainerRequestFilter{
public ContainerRequest filter(ContainerRequest request) {
..extract the attribute from the httpReq
}
}
Ответы
Ответ 1
Вы не можете. Они не подвергаются воздействию API Джерси. Если вы ищете кодовую базу Джерси, вы обнаружите, что нет использования HttpServletRequest.getAttributeNames()
, которое вы ожидаете использовать, если они копируются в массовом порядке. Вы также обнаружите, что существует только несколько применений HttpServletRequest.getAttribute()
, и это строго для внутренней бухгалтерии.
Обратите внимание, однако, что при развертывании в контексте сервлета JAX-RS позволяет вам вводить исходный HttpServletRequest с помощью аннотации @Context
. Я не уверен, можете ли вы сделать это в фильтре Джерси, но он работает в MessageBodyReaders/Writers и в классах ресурсов.
Обновление: Я проверил, и вы можете на самом деле ввести HttpServletRequest в Jersey ContainerRequestFilter, просто включив:
@Context private HttpServletRequest httpRequest;
Ответ 2
Я получил работу @Context
, но проблема в том, что мой ContainerRequestFilter
является singleton.
Мне пришлось реализовать пользовательский javax.servlet.Filter
и использовать ThreadLocal
для хранения HttpServletRequest
.
Ответ 3
Я хотел добавить к предыдущим ответам мое решение, помимо добавления контекста:
@Context
private HttpServletRequest httpRequest;
Вы должны set
и get
атрибуты из сеанса, Get:
httpRequest.getSession().setAttribute("businessId", "yourId");
Set:
Object attribute = httpRequest.getSession().getAttribute("businessId");