泽西+弹簧 - 注入 servlet 请求



我正在启动一个灰熊服务器,如下所示:

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 */
    }
}

我的过滤器按 Spring 的预期实例化。此外,JAX-RS检测到它并使用由Spring实例化的相同实例。我正在尝试访问底层HttpServletRequest但找不到方法。

我知道在将过滤器实例创建为代理之前,永远不会注入 servlet 请求,因为 servlet 请求是请求范围的。我试图用@RequestScope来注释过滤器,同样的事情。

你需要使用 GrizzlyWebContainerFactory

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-grizzly2-servlet</artifactId>
    <version>${jersey2.version}</version>
</dependency>

如果要创建 Servlet 容器。目前,您没有创建 servlet 容器,这就是为什么没有可用的HttpServletRequest

你可以做类似的事情

GrizzlyWebContainerFactory.create(baseUri, new ServletContainer(resourceConfig));

最新更新