я начинаю сервер Grizzly следующим образом:Джерси + Spring - Инъекция запрос сервлета
URI baseUri = UriBuilder.fromUri("http://localhost/").port(9998).build();
ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.packages("com.example");
resourceConfig.property("contextConfig", applicationContext);
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(baseUri, resourceConfig, false);
server.start();
В пакете com.example, у меня есть фильтры следующим образом:
@Component
@Provider
@Priority(0)
public class MyFilter implements ContainerRequestFilter {
@Context
private HttpServletRequest httpServletRequest;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
/* httpServletRequest is null here */
}
}
Мои фильтр создается, как ожидается, весной. Кроме того, JAX-RS обнаружил его и использует тот же экземпляр, созданный Spring. Я пытаюсь получить доступ к базовому HttpServletRequest
, но я не могу найти, как это сделать.
Я знаю, что запрос сервлета никогда не будет вводиться до тех пор, пока экземпляр фильтра не будет создан как прокси-сервер, поскольку запрос сервлета является областью действия запроса. Я попытался аннотировать фильтр @RequestScope
, то же самое.
Можно не использовать контейнер сервлетов? При использовании развертывания на основе сервлетов поставщик компонента Spring ожидает WebApplicationContext, а мой контекст является автономным AnnotationConfigApplicationContext. –
Когда мое приложение запускается, контекст корневого приложения создается на основе класса Spring Configuration. Я хочу, чтобы этот корневой контекст был доступен для Джерси, поэтому я устанавливал свойство contextConfig. Однако это свойство не имеет значения при использовании контейнера сервлета, и в этом случае ожидается, что WebApplicationContext будет под атрибутом сервлета org.springframework.web.context.WebApplicationContext.ROOT. –
Не совсем, так как это сервлет API. К чему вы пытаетесь получить доступ? Вы можете ввести Grizzly 'Request' в' @ Context'. Возможно, это даст вам достаточно информации. –