Jersey+Spring - 注入 servlet 请求
Jersey+Spring - Injecting servlet request
我正在按如下方式启动 Grizzly 服务器:
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));
我正在按如下方式启动 Grizzly 服务器:
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));