我有灰熊提供的球衣。
我有一个ContainerRequestFilter
实现类。但是,为所有传入请求创建一次此类。因此,这样做:
public class EndpointRequestFilter implements ContainerRequestFilter {
@Context
private org.glassfish.grizzly.http.server.Request requestContext;
public void filter( ContainerRequestContext req ) throws IOException {
// remove for sake of example
}
}
该requestContext
为空。我可以将上下文注入到被调用的实际端点中,但这相当粗陋和丑陋,对我来说真的没有用;因为我希望记录各种请求。理想情况下,希望Request
在请求的ResponseFilter端获取此对象。
必须有一种简单的方法来执行此操作。到目前为止,我所看到的所有问题/答案都不适用于Grizzly,也无法插入REST端点调用的方法。我不想只因为我想获得IP地址而想办法解决所有数百种在调用中添加此方法的方法!
那么这里的关键是什么?我想念什么?
令您惊讶的是,您甚至还运行了该应用程序,以至于您可以发现该请求为空。每当我尝试运行它时,我都会在启动时遇到异常,说没有请求范围,因此无法注入请求,这正是我所期望的。尽管我无法复制NPE,但我认为此解决方案仍然可以解决您的问题。
因此,它Request
是一个请求范围对象,因为它随每个请求而变化。但是过滤器的性质是单例。因此,您需要做的就是懒惰地检索它。为此,我们可以将javax.inject.Provider
用作延迟检索机制。
回到我的第一段,这是我刚开始时遇到的例外
java.lang.IllegalStateException:不在请求范围内。
这是有道理的,因为Request
需要与请求范围相关联,并且在启动时没有任何关联。请求范围仅在请求期间存在。
因此,使用Provider
do的目的是让我们尝试Request
在存在请求范围时尝试抢占。
public static class Filter implements ContainerRequestFilter {
@Context
private javax.inject.Provider<Request> requestProvider;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
final Request request = requestProvider.get();
System.out.println(request.getRemoteAddr());
}
}
我已经对此进行了测试,并且可以正常工作。
也可以看看:
我试图实现一个< code > ContainerRequestFilter 来检查一些东西。最终,它将从SSL客户机证书中提取通用名称,但我还没有做到这一点。过滤器运行在Grizzly HTTP服务器上(Grizzly 2.3.8,没有servlet容器),位于JAX-RS资源(Jersey 2.6)的前面。 当我尝试将注入过滤器时,它为null。 将请求注入到 JAX-RS 资源中,注入是成功
过滤器类 资源类别
我试图用jsf和CDI编写一个简单的登录表单。问题是当我注入我的SessionScoped bean时,它不像我期望的那样工作。这是我的豆子 这是我的控制器: 还有一个简单的Jsf表单,它调用login函数并显示LoginInfo类的计数器字段。 通过单击登录按钮和调试变量,我可以看到“lo”是这样的: lo={LoginInfo$Proxy$_$$_WeldClientProxy@16688}“
我有灰熊提供的球衣。 我有一个实现类。但是,为所有传入请求创建一次此类。因此,这样做: 为空。我可以将上下文注入到被调用的实际endpoint中,但这相当粗糙和丑陋,对我来说真的没有用;因为我希望记录各种请求。理想情况下,希望在请求的ResponseFilter端找到这个对象。 必须有一种简单的方法来做到这一点。到目前为止,我看到的所有问题/答案都不适用于灰熊,或者注入了RESTendpoint调
问题内容: 我正在尝试在Spring中建立一个请求范围的bean。 我已经成功设置好了,所以每个请求创建一次bean。现在,它需要访问HttpServletRequest对象。 由于该bean是每个请求创建一次的,所以我认为容器可以轻松地将请求对象注入到我的bean中。我怎样才能做到这一点 ? 问题答案: 可以将请求范围的Bean与请求对象自动连接。
将EntityManager注入资源可以工作,但不能注入Callable。在这里,EntityManager保持。 请告知代码保存在这里是否比保存在GitHub上更好。