В Джерси 1.x мы получили доступ к сеансу Wicket из атрибута сеанса (Джерси), как описано здесь https://stackoverflow.com/a/15767824/1399659.
При переходе на Jersey 2.x представляется правильным использовать фильтр ContainerRequestFilter, который также позволяет внедрять компоненты Spring. У нас это работает успешно, включая
<param-name>jersey.config.server.provider.packages</param-name>
в качестве параметра инициализации для ServletContainer и использования аннотации @Provider в реализации ContainerRequestFilter. Но этот контейнерный фильтр является одноэлементным, и внедрить в него HttpServletRequest невозможно (см. 2114)
В методе filter() у нас есть доступ к ContainerRequestContext, но не может получить оттуда доступ к HttpServletRequest.
Итак, есть ли способ:
- Включить инъекцию Spring bean в фильтр сервлета (также и с Джерси)?
- Доступ к запросу сервлета из ContainerRequestFilter?
- Доступ к сеансу калитки из объекта, поддерживающего Spring-bean, с возможностью фильтрации Джерси каким-то другим способом?
`
import java.io.IOException;
import javax.servlet.http.HttpSession;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.Provider;
import org.apache.wicket.injection.Injector;
@Provider
public class SecurityContextFilter implements ContainerRequestFilter {
//@Context
//HttpServletRequest webRequest;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
//HttpSession httpSession = webRequest.getSession();
//MyWicketSession mySession = (MyWicketSession) httpSession.getAttribute("wicket:" + BaseConstants.WICKET_FILTER_NAME + ":session");
//doAuthCheck(mySession, requestContext);
}
...
}
`
заранее спасибо